dv-pipecat-ai 0.0.74.dev595__tar.gz → 0.0.74.dev613__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/PKG-INFO +1 -1
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/docker-compose.dev.yml +1 -1
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/dv_pipecat_ai.egg-info/PKG-INFO +1 -1
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/dv_pipecat_ai.egg-info/SOURCES.txt +1 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/frame_processor.py +13 -16
- dv_pipecat_ai-0.0.74.dev613/src/pipecat/serializers/__init__.py +24 -0
- dv_pipecat_ai-0.0.74.dev613/src/pipecat/serializers/convox.py +267 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/logger_config.py +3 -0
- dv_pipecat_ai-0.0.74.dev595/src/pipecat/utils/text/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.dockerignore +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/android.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/build.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/coverage.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/format.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/github.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/promote-prod.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/publish.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/publish_test.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/set-traffic-split.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/tests.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.gitignore +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.pre-commit-config.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.readthedocs.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/CHANGELOG.md +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/CHANGELOG.md.template +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/CLAUDE.md +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/CONTRIBUTING.md +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/Dockerfile +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/LICENSE +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/MANIFEST.in +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/README.md +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/ansible.cfg +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/ansible_deployment.sh +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/cleanup_old_containers.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/codecov.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create-new-machine/ansible.cfg +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create-new-machine/ansible_setup.sh +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create-new-machine/inventory.ini +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create-new-machine/replace_env.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create-new-machine/setup_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create_inventory.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/delete_old_dockers.sh +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/deploy.sh +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/deploy_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/dev-requirements.txt +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/dot-env.template +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/dump_logs.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/fetch_logs.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/inventory.ini +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/.helmignore +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/Chart.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/service.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/values-canary.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/values-prod.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/values-stage.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/values.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/istio/destination-virtualservice.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/merge-code-into-single-file.sh +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/pipecat.png +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/pyproject.toml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/restart.sh +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/restart_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/setup.cfg +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/dv_pipecat_ai.egg-info/requires.txt +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/base_llm_adapter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/schemas/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/schemas/function_schema.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/filters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/filters/koala_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/filters/krisp_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/interruptions/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/mixers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/resamplers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/utils.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/vad/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/vad/data/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/vad/silero.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/clocks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/clocks/base_clock.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/clocks/system_clock.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/examples/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/examples/daily_runner.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/examples/run.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/frames/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/frames/frames.proto +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/frames/frames.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/metrics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/metrics/metrics.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/base_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/loggers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/turn_tracking_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/base_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/base_task.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/pipeline.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/runner.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/task.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/task_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/dtmf_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/gated.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/gated_openai_llm_context.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/llm_response.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/sentence.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/user_response.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/async_generator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/audio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/consumer_processor.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/dtmf_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/frame_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/function_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/identity_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/null_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/frameworks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/frameworks/langchain.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/frameworks/rtvi.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/gstreamer/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/idle_frame_processor.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/logger.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/metrics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/metrics/frame_processor_metrics.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/metrics/sentry.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/producer_processor.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/text_transformer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/transcript_processor.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/user_idle_processor.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/py.typed +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/base_serializer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/exotel.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/genesys.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/livekit.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/plivo.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/protobuf.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/telnyx.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/twilio.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/ai_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/ai_services.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/anthropic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/anthropic/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/assemblyai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/assemblyai/models.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/assemblyai/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws/utils.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws_nova_sonic/ready.wav +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/azure/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/azure/common.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/azure/image.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/azure/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/azure/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/azure/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/cartesia/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/cartesia/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/cartesia/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/cerebras/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/cerebras/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/deepgram/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/deepgram/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/deepgram/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/deepseek/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/deepseek/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/elevenlabs/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/elevenlabs/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/fal/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/fal/image.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/fal/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/fireworks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/fireworks/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/fish/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/fish/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/gladia/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/gladia/config.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/gladia/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/frames.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/google.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/image.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/llm_openai.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/llm_vertex.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/rtvi.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/test-google-chirp.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/grok/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/grok/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/groq/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/groq/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/groq/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/groq/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/image_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/llm_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/lmnt/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/lmnt/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/mcp_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/mem0/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/mem0/memory.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/minimax/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/minimax/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/moondream/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/moondream/vision.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/neuphonic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/neuphonic/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/nim/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/nim/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/ollama/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/ollama/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai/base_llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai/image.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openpipe/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openpipe/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openrouter/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openrouter/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/perplexity/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/perplexity/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/piper/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/piper/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/playht/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/playht/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/qwen/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/qwen/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/rime/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/rime/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/riva/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/riva/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/riva/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/sambanova/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/sambanova/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/sambanova/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/sarvam/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/sarvam/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/simli/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/simli/video.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/stt_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/tavus/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/tavus/video.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/together/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/together/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/tts_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/ultravox/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/ultravox/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/vision_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/websocket_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/whisper/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/whisper/base_stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/whisper/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/xtts/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/xtts/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595/src/pipecat/serializers → dv_pipecat_ai-0.0.74.dev613/src/pipecat/sync}/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/sync/base_notifier.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/sync/event_notifier.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595/src/pipecat/sync → dv_pipecat_ai-0.0.74.dev613/src/pipecat/tests}/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/tests/utils.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595/src/pipecat/tests → dv_pipecat_ai-0.0.74.dev613/src/pipecat/transcriptions}/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transcriptions/language.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595/src/pipecat/transcriptions → dv_pipecat_ai-0.0.74.dev613/src/pipecat/transports}/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/base_input.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/base_output.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/base_transport.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595/src/pipecat/transports → dv_pipecat_ai-0.0.74.dev613/src/pipecat/transports/local}/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/local/audio.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/local/tk.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595/src/pipecat/transports/local → dv_pipecat_ai-0.0.74.dev613/src/pipecat/transports/network}/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/network/fastapi_websocket.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/network/small_webrtc.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/network/webrtc_connection.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/network/websocket_client.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/network/websocket_server.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595/src/pipecat/transports/network → dv_pipecat_ai-0.0.74.dev613/src/pipecat/transports/services}/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/services/daily.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595/src/pipecat/transports/services → dv_pipecat_ai-0.0.74.dev613/src/pipecat/transports/services/helpers}/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/services/livekit.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/services/tavus.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595/src/pipecat/transports/services/helpers → dv_pipecat_ai-0.0.74.dev613/src/pipecat/utils}/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595/src/pipecat/utils → dv_pipecat_ai-0.0.74.dev613/src/pipecat/utils/asyncio}/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/asyncio/task_manager.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/asyncio/watchdog_async_iterator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/asyncio/watchdog_event.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/asyncio/watchdog_priority_queue.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/asyncio/watchdog_queue.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/base_object.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/network.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/string.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595/src/pipecat/utils/asyncio → dv_pipecat_ai-0.0.74.dev613/src/pipecat/utils/text}/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/text/base_text_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/time.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/class_decorators.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/service_attributes.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/service_decorators.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/setup.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/utils.py +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/stop_container.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/test-requirements.txt +0 -0
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/dv_pipecat_ai.egg-info/SOURCES.txt
RENAMED
|
@@ -188,6 +188,7 @@ src/pipecat/processors/metrics/frame_processor_metrics.py
|
|
|
188
188
|
src/pipecat/processors/metrics/sentry.py
|
|
189
189
|
src/pipecat/serializers/__init__.py
|
|
190
190
|
src/pipecat/serializers/base_serializer.py
|
|
191
|
+
src/pipecat/serializers/convox.py
|
|
191
192
|
src/pipecat/serializers/exotel.py
|
|
192
193
|
src/pipecat/serializers/genesys.py
|
|
193
194
|
src/pipecat/serializers/livekit.py
|
|
@@ -434,31 +434,28 @@ class FrameProcessor(BaseObject):
|
|
|
434
434
|
self.__input_frame_task = None
|
|
435
435
|
|
|
436
436
|
async def __input_frame_task_handler(self):
|
|
437
|
+
"""Handle frames from the input queue."""
|
|
438
|
+
my_queue = self.__input_queue
|
|
437
439
|
while True:
|
|
438
|
-
|
|
440
|
+
if self.__should_block_frames and self.__input_event:
|
|
441
|
+
logger.trace(f"{self}: frame processing paused")
|
|
442
|
+
await self.__input_event.wait()
|
|
443
|
+
self.__input_event.clear()
|
|
444
|
+
self.__should_block_frames = False
|
|
445
|
+
logger.trace(f"{self}: frame processing resumed")
|
|
446
|
+
|
|
447
|
+
(frame, direction, callback) = await my_queue.get()
|
|
439
448
|
try:
|
|
440
|
-
|
|
441
|
-
self.logger.trace(f"{self}: frame processing paused")
|
|
442
|
-
await self.__input_event.wait()
|
|
443
|
-
self.__input_event.clear()
|
|
444
|
-
self.__should_block_frames = False
|
|
445
|
-
self.logger.trace(f"{self}: frame processing resumed")
|
|
446
|
-
|
|
447
|
-
frame_tuple = await self.__input_queue.get()
|
|
448
|
-
(frame, direction, callback) = frame_tuple
|
|
449
|
-
|
|
449
|
+
# Process the frame.
|
|
450
450
|
await self.process_frame(frame, direction)
|
|
451
|
+
# If this frame has an associated callback, call it now.
|
|
451
452
|
if callback:
|
|
452
453
|
await callback(self, frame, direction)
|
|
453
|
-
except asyncio.CancelledError:
|
|
454
|
-
raise
|
|
455
454
|
except Exception as e:
|
|
456
455
|
self.logger.exception(f"{self}: error processing frame: {e}")
|
|
457
456
|
await self.push_error(ErrorFrame(str(e)))
|
|
458
457
|
finally:
|
|
459
|
-
|
|
460
|
-
if frame_tuple is not None:
|
|
461
|
-
self.__input_queue.task_done()
|
|
458
|
+
my_queue.task_done()
|
|
462
459
|
|
|
463
460
|
def __create_push_task(self):
|
|
464
461
|
if not self.__push_frame_task:
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from .base_serializer import FrameSerializer, FrameSerializerType
|
|
2
|
+
from .convox import ConVoxFrameSerializer
|
|
3
|
+
from .exotel import ExotelFrameSerializer
|
|
4
|
+
from .plivo import PlivoFrameSerializer
|
|
5
|
+
from .telnyx import TelnyxFrameSerializer
|
|
6
|
+
from .twilio import TwilioFrameSerializer
|
|
7
|
+
|
|
8
|
+
__all__ = [
|
|
9
|
+
"FrameSerializer",
|
|
10
|
+
"FrameSerializerType",
|
|
11
|
+
"ConVoxFrameSerializer",
|
|
12
|
+
"ExotelFrameSerializer",
|
|
13
|
+
"PlivoFrameSerializer",
|
|
14
|
+
"TelnyxFrameSerializer",
|
|
15
|
+
"TwilioFrameSerializer",
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
# Optional imports
|
|
19
|
+
try:
|
|
20
|
+
from .livekit import LiveKitFrameSerializer
|
|
21
|
+
__all__.append("LiveKitFrameSerializer")
|
|
22
|
+
except (ImportError, Exception):
|
|
23
|
+
# Catch both ImportError and the Exception raised by livekit.py when module is missing
|
|
24
|
+
pass
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2024–2025, Daily
|
|
3
|
+
#
|
|
4
|
+
# SPDX-License-Identifier: BSD 2-Clause License
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
import base64
|
|
8
|
+
import json
|
|
9
|
+
from typing import Optional
|
|
10
|
+
|
|
11
|
+
from loguru import logger
|
|
12
|
+
from pydantic import BaseModel
|
|
13
|
+
|
|
14
|
+
from pipecat.audio.utils import create_default_resampler
|
|
15
|
+
from pipecat.frames.frames import (
|
|
16
|
+
AudioRawFrame,
|
|
17
|
+
EndFrame,
|
|
18
|
+
Frame,
|
|
19
|
+
InputAudioRawFrame,
|
|
20
|
+
InputDTMFFrame,
|
|
21
|
+
KeypadEntry,
|
|
22
|
+
StartFrame,
|
|
23
|
+
StartInterruptionFrame,
|
|
24
|
+
TransportMessageFrame,
|
|
25
|
+
TransportMessageUrgentFrame,
|
|
26
|
+
)
|
|
27
|
+
from pipecat.serializers.base_serializer import FrameSerializer, FrameSerializerType
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class ConVoxFrameSerializer(FrameSerializer):
|
|
31
|
+
"""Serializer for ConVox WebSocket protocol.
|
|
32
|
+
|
|
33
|
+
This serializer handles converting between Pipecat frames and ConVox's WebSocket
|
|
34
|
+
protocol. It supports audio conversion, DTMF events, and real-time communication
|
|
35
|
+
with ConVox telephony systems.
|
|
36
|
+
|
|
37
|
+
ConVox WebSocket protocol typically uses:
|
|
38
|
+
- PCM audio format at 16kHz sample rate
|
|
39
|
+
- Base64 encoded audio payloads
|
|
40
|
+
- JSON message format for control and media events
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
class InputParams(BaseModel):
|
|
44
|
+
"""Configuration parameters for ConVoxFrameSerializer.
|
|
45
|
+
|
|
46
|
+
Attributes:
|
|
47
|
+
convox_sample_rate: Sample rate used by ConVox, defaults to 16000 Hz.
|
|
48
|
+
sample_rate: Optional override for pipeline input sample rate.
|
|
49
|
+
auto_hang_up: Whether to automatically terminate call on EndFrame.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
convox_sample_rate: int = 16000
|
|
53
|
+
sample_rate: Optional[int] = None
|
|
54
|
+
auto_hang_up: bool = False
|
|
55
|
+
|
|
56
|
+
def __init__(
|
|
57
|
+
self,
|
|
58
|
+
stream_id: str,
|
|
59
|
+
call_id: Optional[str] = None,
|
|
60
|
+
params: Optional[InputParams] = None,
|
|
61
|
+
):
|
|
62
|
+
"""Initialize the ConVoxFrameSerializer.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
stream_id: The ConVox stream identifier.
|
|
66
|
+
call_id: The associated ConVox call identifier.
|
|
67
|
+
params: Configuration parameters.
|
|
68
|
+
"""
|
|
69
|
+
self._stream_id = stream_id
|
|
70
|
+
self._call_id = call_id
|
|
71
|
+
self._params = params or ConVoxFrameSerializer.InputParams()
|
|
72
|
+
|
|
73
|
+
self._convox_sample_rate = self._params.convox_sample_rate
|
|
74
|
+
self._sample_rate = 0 # Pipeline input rate
|
|
75
|
+
self._call_ended = False
|
|
76
|
+
|
|
77
|
+
self._resampler = create_default_resampler()
|
|
78
|
+
|
|
79
|
+
@property
|
|
80
|
+
def type(self) -> FrameSerializerType:
|
|
81
|
+
"""Gets the serializer type.
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
The serializer type as TEXT for JSON WebSocket messages.
|
|
85
|
+
"""
|
|
86
|
+
return FrameSerializerType.TEXT
|
|
87
|
+
|
|
88
|
+
async def setup(self, frame: StartFrame):
|
|
89
|
+
"""Sets up the serializer with pipeline configuration.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
frame: The StartFrame containing pipeline configuration.
|
|
93
|
+
"""
|
|
94
|
+
self._sample_rate = self._params.sample_rate or frame.audio_in_sample_rate
|
|
95
|
+
|
|
96
|
+
async def serialize(self, frame: Frame) -> str | bytes | None:
|
|
97
|
+
"""Serializes a Pipecat frame to ConVox WebSocket format.
|
|
98
|
+
|
|
99
|
+
Handles conversion of various frame types to ConVox WebSocket messages.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
frame: The Pipecat frame to serialize.
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
Serialized data as JSON string, or None if the frame isn't handled.
|
|
106
|
+
"""
|
|
107
|
+
if isinstance(frame, StartInterruptionFrame):
|
|
108
|
+
# Clear/interrupt command for ConVox
|
|
109
|
+
message = {
|
|
110
|
+
"event": "clear",
|
|
111
|
+
"stream_id": self._stream_id,
|
|
112
|
+
"call_id": self._call_id,
|
|
113
|
+
}
|
|
114
|
+
return json.dumps(message)
|
|
115
|
+
|
|
116
|
+
elif isinstance(frame, AudioRawFrame):
|
|
117
|
+
if self._call_ended:
|
|
118
|
+
logger.debug("🎵 CONVOX SERIALIZE: Skipping audio - call has ended")
|
|
119
|
+
return None
|
|
120
|
+
|
|
121
|
+
# Convert PCM audio to ConVox format
|
|
122
|
+
data = frame.audio
|
|
123
|
+
# logger.info(
|
|
124
|
+
# f"🎵 CONVOX SERIALIZE: Processing AudioRawFrame - Original: {len(data)} bytes at {frame.sample_rate}Hz"
|
|
125
|
+
# )
|
|
126
|
+
|
|
127
|
+
# Resample to ConVox sample rate
|
|
128
|
+
serialized_data = await self._resampler.resample(
|
|
129
|
+
data, frame.sample_rate, self._convox_sample_rate
|
|
130
|
+
)
|
|
131
|
+
# logger.info(
|
|
132
|
+
# f"🎵 CONVOX SERIALIZE: Resampled to {self._convox_sample_rate}Hz - {len(serialized_data)} bytes"
|
|
133
|
+
# )
|
|
134
|
+
|
|
135
|
+
# Encode as base64 for transmission
|
|
136
|
+
payload = base64.b64encode(serialized_data).decode("ascii")
|
|
137
|
+
logger.info(f"🎵 CONVOX SERIALIZE: Base64 encoded - {len(payload)} characters")
|
|
138
|
+
|
|
139
|
+
# ConVox expects play_audio event format according to the documentation
|
|
140
|
+
import datetime
|
|
141
|
+
|
|
142
|
+
timestamp = datetime.datetime.now().isoformat()
|
|
143
|
+
|
|
144
|
+
message = {
|
|
145
|
+
"event": "play_audio",
|
|
146
|
+
"stream_id": self._stream_id,
|
|
147
|
+
"call_id": self._call_id,
|
|
148
|
+
"details": {
|
|
149
|
+
"timestamp": timestamp,
|
|
150
|
+
"direction": "WSS",
|
|
151
|
+
"message": payload,
|
|
152
|
+
},
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
# logger.info(
|
|
156
|
+
# f"🎵 CONVOX SERIALIZE: Sending play_audio event to ConVox - stream_id: {self._stream_id}, call_id: {self._call_id}"
|
|
157
|
+
# )
|
|
158
|
+
# logger.debug(f"🎵 CONVOX SERIALIZE: Complete message: {json.dumps(message, indent=2)}")
|
|
159
|
+
|
|
160
|
+
return json.dumps(message)
|
|
161
|
+
|
|
162
|
+
elif isinstance(frame, (TransportMessageFrame, TransportMessageUrgentFrame)):
|
|
163
|
+
# Pass through transport messages
|
|
164
|
+
return json.dumps(frame.message)
|
|
165
|
+
|
|
166
|
+
return None
|
|
167
|
+
|
|
168
|
+
async def deserialize(self, data: str | bytes) -> Frame | None:
|
|
169
|
+
"""Deserializes ConVox WebSocket data to Pipecat frames.
|
|
170
|
+
|
|
171
|
+
Handles conversion of ConVox media events to appropriate Pipecat frames.
|
|
172
|
+
|
|
173
|
+
Args:
|
|
174
|
+
data: The raw WebSocket data from ConVox.
|
|
175
|
+
|
|
176
|
+
Returns:
|
|
177
|
+
A Pipecat frame corresponding to the ConVox event, or None if unhandled.
|
|
178
|
+
"""
|
|
179
|
+
try:
|
|
180
|
+
message = json.loads(data)
|
|
181
|
+
except json.JSONDecodeError:
|
|
182
|
+
logger.error(f"Invalid JSON received from ConVox: {data}")
|
|
183
|
+
return None
|
|
184
|
+
|
|
185
|
+
event = message.get("event")
|
|
186
|
+
|
|
187
|
+
if event == "media":
|
|
188
|
+
# Handle incoming audio data
|
|
189
|
+
media = message.get("media", {})
|
|
190
|
+
payload_base64 = media.get("payload")
|
|
191
|
+
|
|
192
|
+
if not payload_base64:
|
|
193
|
+
logger.warning("🎵 CONVOX DESERIALIZE: No payload in ConVox media message")
|
|
194
|
+
return None
|
|
195
|
+
|
|
196
|
+
try:
|
|
197
|
+
payload = base64.b64decode(payload_base64)
|
|
198
|
+
# logger.info(
|
|
199
|
+
# f"🎵 CONVOX DESERIALIZE: Received audio from ConVox - {len(payload)} bytes at {self._convox_sample_rate}Hz"
|
|
200
|
+
# )
|
|
201
|
+
except Exception as e:
|
|
202
|
+
logger.error(f"🎵 CONVOX DESERIALIZE: Error decoding ConVox audio payload: {e}")
|
|
203
|
+
return None
|
|
204
|
+
|
|
205
|
+
# Convert from ConVox sample rate to pipeline sample rate
|
|
206
|
+
deserialized_data = await self._resampler.resample(
|
|
207
|
+
payload,
|
|
208
|
+
self._convox_sample_rate,
|
|
209
|
+
self._sample_rate,
|
|
210
|
+
)
|
|
211
|
+
# logger.info(
|
|
212
|
+
# f"🎵 CONVOX DESERIALIZE: Resampled to pipeline rate {self._sample_rate}Hz - {len(deserialized_data)} bytes"
|
|
213
|
+
# )
|
|
214
|
+
|
|
215
|
+
audio_frame = InputAudioRawFrame(
|
|
216
|
+
audio=deserialized_data,
|
|
217
|
+
num_channels=1, # ConVox typically uses mono audio
|
|
218
|
+
sample_rate=self._sample_rate,
|
|
219
|
+
)
|
|
220
|
+
# logger.info(
|
|
221
|
+
# f"🎵 CONVOX DESERIALIZE: Created InputAudioRawFrame for pipeline processing"
|
|
222
|
+
# )
|
|
223
|
+
return audio_frame
|
|
224
|
+
|
|
225
|
+
elif event == "dtmf":
|
|
226
|
+
# Handle DTMF events
|
|
227
|
+
dtmf_data = message.get("dtmf", {})
|
|
228
|
+
digit = dtmf_data.get("digit")
|
|
229
|
+
|
|
230
|
+
if digit:
|
|
231
|
+
try:
|
|
232
|
+
return InputDTMFFrame(KeypadEntry(digit))
|
|
233
|
+
except ValueError:
|
|
234
|
+
logger.warning(f"Invalid DTMF digit from ConVox: {digit}")
|
|
235
|
+
return None
|
|
236
|
+
|
|
237
|
+
elif event == "start":
|
|
238
|
+
# Handle stream start event
|
|
239
|
+
logger.info(f"ConVox stream started: {message}")
|
|
240
|
+
return None
|
|
241
|
+
|
|
242
|
+
elif event == "stop":
|
|
243
|
+
# Handle stream stop event
|
|
244
|
+
logger.info(f"ConVox stream stopped: {message}")
|
|
245
|
+
return None
|
|
246
|
+
|
|
247
|
+
elif event == "error":
|
|
248
|
+
# Handle error events
|
|
249
|
+
error_msg = message.get("error", "Unknown error")
|
|
250
|
+
logger.error(f"ConVox error: {error_msg}")
|
|
251
|
+
return None
|
|
252
|
+
|
|
253
|
+
elif event == "end_call" or event == "call_end":
|
|
254
|
+
logger.info("ConVox call end event received")
|
|
255
|
+
self._call_ended = True
|
|
256
|
+
return EndFrame()
|
|
257
|
+
|
|
258
|
+
elif event == "failed":
|
|
259
|
+
logger.info(f"ConVox failed event received: {message}")
|
|
260
|
+
self._call_ended = True
|
|
261
|
+
return EndFrame()
|
|
262
|
+
|
|
263
|
+
else:
|
|
264
|
+
logger.debug(f"Unhandled ConVox event: {event}")
|
|
265
|
+
return None
|
|
266
|
+
|
|
267
|
+
return None
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/logger_config.py
RENAMED
|
@@ -75,6 +75,9 @@ def formatter(record: Dict[str, Any]) -> str:
|
|
|
75
75
|
record["extra"] = {}
|
|
76
76
|
|
|
77
77
|
call_id = record["extra"].get("call_id", "unknown")
|
|
78
|
+
if call_id is None:
|
|
79
|
+
call_id = "unknown"
|
|
80
|
+
|
|
78
81
|
record["extra"]["tags"] = {
|
|
79
82
|
"application": LOGGER_NAME,
|
|
80
83
|
"call_id": call_id,
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/1-bug_report.yml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/2-question.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/5-new-service.yml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/6-dependency.yml
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/config.yml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/PULL_REQUEST_TEMPLATE.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/promote-prod.yml
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/publish_test.yaml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/set-traffic-split.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create-new-machine/ansible_setup.sh
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create-new-machine/inventory.ini
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create-new-machine/replace_env.yml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create-new-machine/setup_playbook.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/_helpers.tpl
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/deployment.yaml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/hpa.yaml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/ingress.yaml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/service.yaml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/values-canary.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/values-stage.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/dv_pipecat_ai.egg-info/requires.txt
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/dv_pipecat_ai.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/__init__.py
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/base_llm_adapter.py
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/schemas/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/filters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/mixers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/resamplers/__init__.py
RENAMED
|
File without changes
|