dv-pipecat-ai 0.0.74.dev613__tar.gz → 0.0.74.dev623__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.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/github.yml +148 -1
- dv_pipecat_ai-0.0.74.dev623/.github/workflows/smart-auto-release.yml +171 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/CLAUDE.md +68 -1
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/PKG-INFO +1 -1
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/dv_pipecat_ai.egg-info/PKG-INFO +1 -1
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/dv_pipecat_ai.egg-info/SOURCES.txt +1 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/convox.py +5 -10
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/deepgram/stt.py +6 -1
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/network/fastapi_websocket.py +22 -12
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.dockerignore +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/android.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/build.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/coverage.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/format.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/promote-prod.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/publish.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/publish_test.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/set-traffic-split.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/tests.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.gitignore +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.pre-commit-config.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.readthedocs.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/CHANGELOG.md +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/CHANGELOG.md.template +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/CONTRIBUTING.md +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/Dockerfile +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/LICENSE +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/MANIFEST.in +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/README.md +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/ansible.cfg +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/ansible_deployment.sh +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/cleanup_old_containers.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/codecov.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/create-new-machine/ansible.cfg +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/create-new-machine/ansible_setup.sh +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/create-new-machine/inventory.ini +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/create-new-machine/replace_env.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/create-new-machine/setup_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/create_inventory.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/delete_old_dockers.sh +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/deploy.sh +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/deploy_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/dev-requirements.txt +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/docker-compose.dev.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/dot-env.template +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/dump_logs.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/fetch_logs.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/inventory.ini +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/.helmignore +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/Chart.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/templates/service.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/values-canary.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/values-prod.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/values-stage.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/values.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/istio/destination-virtualservice.yaml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/merge-code-into-single-file.sh +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/pipecat.png +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/pyproject.toml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/restart.sh +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/restart_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/setup.cfg +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/dv_pipecat_ai.egg-info/requires.txt +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/base_llm_adapter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/schemas/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/schemas/function_schema.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/filters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/filters/koala_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/filters/krisp_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/interruptions/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/mixers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/resamplers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/utils.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/vad/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/vad/data/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/vad/silero.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/clocks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/clocks/base_clock.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/clocks/system_clock.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/examples/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/examples/daily_runner.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/examples/run.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/frames/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/frames/frames.proto +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/frames/frames.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/metrics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/metrics/metrics.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/base_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/loggers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/turn_tracking_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/base_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/base_task.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/pipeline.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/runner.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/task.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/task_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/dtmf_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/gated.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/gated_openai_llm_context.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/llm_response.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/sentence.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/user_response.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/async_generator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/audio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/consumer_processor.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/dtmf_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/frame_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/function_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/identity_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/null_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/frame_processor.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/frameworks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/frameworks/langchain.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/frameworks/rtvi.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/gstreamer/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/idle_frame_processor.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/logger.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/metrics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/metrics/frame_processor_metrics.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/metrics/sentry.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/producer_processor.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/text_transformer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/transcript_processor.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/user_idle_processor.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/py.typed +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/base_serializer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/exotel.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/genesys.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/livekit.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/plivo.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/protobuf.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/telnyx.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/twilio.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/ai_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/ai_services.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/anthropic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/anthropic/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/assemblyai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/assemblyai/models.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/assemblyai/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws/utils.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws_nova_sonic/ready.wav +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/azure/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/azure/common.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/azure/image.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/azure/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/azure/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/azure/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/cartesia/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/cartesia/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/cartesia/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/cerebras/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/cerebras/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/deepgram/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/deepgram/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/deepseek/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/deepseek/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/elevenlabs/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/elevenlabs/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/fal/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/fal/image.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/fal/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/fireworks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/fireworks/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/fish/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/fish/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/gladia/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/gladia/config.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/gladia/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/frames.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/google.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/image.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/llm_openai.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/llm_vertex.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/rtvi.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/test-google-chirp.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/grok/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/grok/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/groq/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/groq/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/groq/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/groq/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/image_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/llm_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/lmnt/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/lmnt/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/mcp_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/mem0/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/mem0/memory.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/minimax/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/minimax/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/moondream/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/moondream/vision.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/neuphonic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/neuphonic/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/nim/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/nim/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/ollama/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/ollama/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai/base_llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai/image.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openpipe/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openpipe/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openrouter/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openrouter/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/perplexity/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/perplexity/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/piper/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/piper/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/playht/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/playht/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/qwen/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/qwen/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/rime/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/rime/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/riva/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/riva/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/riva/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/sambanova/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/sambanova/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/sambanova/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/sarvam/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/sarvam/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/simli/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/simli/video.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/stt_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/tavus/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/tavus/video.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/together/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/together/llm.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/tts_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/ultravox/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/ultravox/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/vision_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/websocket_service.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/whisper/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/whisper/base_stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/whisper/stt.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/xtts/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/xtts/tts.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/sync/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/sync/base_notifier.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/sync/event_notifier.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/tests/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/tests/utils.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transcriptions/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transcriptions/language.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/base_input.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/base_output.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/base_transport.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/local/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/local/audio.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/local/tk.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/network/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/network/small_webrtc.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/network/webrtc_connection.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/network/websocket_client.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/network/websocket_server.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/services/daily.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/services/helpers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/services/livekit.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/services/tavus.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/asyncio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/asyncio/task_manager.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/asyncio/watchdog_async_iterator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/asyncio/watchdog_event.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/asyncio/watchdog_priority_queue.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/asyncio/watchdog_queue.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/base_object.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/logger_config.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/network.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/string.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/text/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/text/base_text_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/time.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/__init__.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/class_decorators.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/service_attributes.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/service_decorators.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/setup.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/utils.py +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/stop_container.yml +0 -0
- {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/test-requirements.txt +0 -0
|
@@ -34,6 +34,55 @@ jobs:
|
|
|
34
34
|
- name: Checkout code
|
|
35
35
|
uses: actions/checkout@v4
|
|
36
36
|
|
|
37
|
+
# - name: Set up Python
|
|
38
|
+
# uses: actions/setup-python@v4
|
|
39
|
+
# with:
|
|
40
|
+
# python-version: '3.10'
|
|
41
|
+
|
|
42
|
+
# - name: Install Python dependencies
|
|
43
|
+
# run: |
|
|
44
|
+
# python -m pip install --upgrade pip
|
|
45
|
+
# pip install requests packaging
|
|
46
|
+
|
|
47
|
+
# - name: Verify PyPI package availability
|
|
48
|
+
# run: |
|
|
49
|
+
# echo "🔍 Verifying PyPI package availability..."
|
|
50
|
+
|
|
51
|
+
# # Get version from remote-requirements.txt
|
|
52
|
+
# PIPECAT_VERSION=$(grep "dv-pipecat-ai" examples/ringg-chatbot/remote-requirements.txt | sed -n 's/.*==\([^]]*\).*/\1/p')
|
|
53
|
+
# echo "📦 Required pipecat version: $PIPECAT_VERSION"
|
|
54
|
+
|
|
55
|
+
# # Verify package is available on PyPI with retry logic
|
|
56
|
+
# MAX_ATTEMPTS=30
|
|
57
|
+
# ATTEMPT=1
|
|
58
|
+
# PACKAGE_AVAILABLE=false
|
|
59
|
+
|
|
60
|
+
# while [ $ATTEMPT -le $MAX_ATTEMPTS ]; do
|
|
61
|
+
# echo "🔍 Attempt $ATTEMPT/$MAX_ATTEMPTS: Checking PyPI for dv-pipecat-ai==$PIPECAT_VERSION"
|
|
62
|
+
|
|
63
|
+
# if python scripts/check-pypi-package.py dv-pipecat-ai "$PIPECAT_VERSION"; then
|
|
64
|
+
# PACKAGE_AVAILABLE=true
|
|
65
|
+
# echo "✅ PyPI package verification successful!"
|
|
66
|
+
# break
|
|
67
|
+
# else
|
|
68
|
+
# if [ $ATTEMPT -eq $MAX_ATTEMPTS ]; then
|
|
69
|
+
# echo "❌ FAILED: Package dv-pipecat-ai==$PIPECAT_VERSION not available on PyPI after $MAX_ATTEMPTS attempts"
|
|
70
|
+
# echo "🚨 This usually means:"
|
|
71
|
+
# echo " 1. The auto-release workflow failed to publish"
|
|
72
|
+
# echo " 2. PyPI is experiencing delays"
|
|
73
|
+
# echo " 3. Version mismatch between requirements.txt and PyPI"
|
|
74
|
+
# exit 1
|
|
75
|
+
# else
|
|
76
|
+
# WAIT_TIME=$((ATTEMPT * 10))
|
|
77
|
+
# echo "⏳ Package not yet available, waiting ${WAIT_TIME}s before retry..."
|
|
78
|
+
# sleep $WAIT_TIME
|
|
79
|
+
# fi
|
|
80
|
+
# fi
|
|
81
|
+
# ATTEMPT=$((ATTEMPT + 1))
|
|
82
|
+
# done
|
|
83
|
+
|
|
84
|
+
# echo "PIPECAT_VERSION=$PIPECAT_VERSION" >> $GITHUB_ENV
|
|
85
|
+
|
|
37
86
|
- name: Authenticate to GCP using Workload Identity Federation
|
|
38
87
|
id: auth
|
|
39
88
|
uses: google-github-actions/auth@v2
|
|
@@ -134,9 +183,107 @@ jobs:
|
|
|
134
183
|
- name: Deploy canary service
|
|
135
184
|
if: github.ref == 'refs/heads/dv-main'
|
|
136
185
|
run: |
|
|
186
|
+
echo "🚀 Deploying canary service..."
|
|
137
187
|
helm upgrade --install ${HELM_RELEASE_NAME}-canary ./k8s/dv-pipecat \
|
|
138
188
|
-f ./k8s/dv-pipecat/values-prod.yaml \
|
|
139
189
|
-f ./k8s/dv-pipecat/values-canary.yaml \
|
|
140
190
|
--set image.repository=$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME \
|
|
141
191
|
--set image.tag=$GITHUB_SHA \
|
|
142
|
-
--namespace default
|
|
192
|
+
--namespace default
|
|
193
|
+
|
|
194
|
+
# - name: Deployment validation
|
|
195
|
+
# run: |
|
|
196
|
+
# echo "🔍 Validating deployment..."
|
|
197
|
+
|
|
198
|
+
# if [ "${{ github.ref }}" == "refs/heads/dv-stage" ]; then
|
|
199
|
+
# DEPLOYMENT_NAME="$HELM_RELEASE_NAME"
|
|
200
|
+
# ENVIRONMENT="staging"
|
|
201
|
+
# else
|
|
202
|
+
# DEPLOYMENT_NAME="${HELM_RELEASE_NAME}-canary"
|
|
203
|
+
# ENVIRONMENT="production-canary"
|
|
204
|
+
# fi
|
|
205
|
+
|
|
206
|
+
# echo "📊 Checking deployment: $DEPLOYMENT_NAME"
|
|
207
|
+
|
|
208
|
+
# # Wait for deployment to be ready
|
|
209
|
+
# kubectl rollout status deployment/$DEPLOYMENT_NAME --namespace=default --timeout=300s
|
|
210
|
+
|
|
211
|
+
# # Check pod status
|
|
212
|
+
# READY_PODS=$(kubectl get deployment $DEPLOYMENT_NAME --namespace=default -o jsonpath='{.status.readyReplicas}')
|
|
213
|
+
# DESIRED_PODS=$(kubectl get deployment $DEPLOYMENT_NAME --namespace=default -o jsonpath='{.spec.replicas}')
|
|
214
|
+
|
|
215
|
+
# echo "📈 Pod Status: $READY_PODS/$DESIRED_PODS ready"
|
|
216
|
+
|
|
217
|
+
# if [ "$READY_PODS" = "$DESIRED_PODS" ] && [ "$READY_PODS" -gt "0" ]; then
|
|
218
|
+
# echo "✅ Deployment validation successful for $ENVIRONMENT"
|
|
219
|
+
# echo "🎉 All $READY_PODS pods are ready and running"
|
|
220
|
+
|
|
221
|
+
# # Show running pods
|
|
222
|
+
# echo "🔍 Running pods:"
|
|
223
|
+
# kubectl get pods -l app.kubernetes.io/name=dv-pipecat --namespace=default
|
|
224
|
+
|
|
225
|
+
# else
|
|
226
|
+
# echo "❌ Deployment validation failed for $ENVIRONMENT"
|
|
227
|
+
# echo "🚨 Expected $DESIRED_PODS pods, but only $READY_PODS are ready"
|
|
228
|
+
|
|
229
|
+
# # Show pod details for debugging
|
|
230
|
+
# echo "🔍 Pod details:"
|
|
231
|
+
# kubectl get pods -l app.kubernetes.io/name=dv-pipecat --namespace=default
|
|
232
|
+
# kubectl describe deployment/$DEPLOYMENT_NAME --namespace=default
|
|
233
|
+
|
|
234
|
+
# exit 1
|
|
235
|
+
# fi
|
|
236
|
+
|
|
237
|
+
# - name: Package version verification
|
|
238
|
+
# run: |
|
|
239
|
+
# echo "🔍 Verifying deployment readiness..."
|
|
240
|
+
|
|
241
|
+
# if [ "${{ github.ref }}" == "refs/heads/dv-stage" ]; then
|
|
242
|
+
# DEPLOYMENT_NAME="$HELM_RELEASE_NAME"
|
|
243
|
+
# else
|
|
244
|
+
# DEPLOYMENT_NAME="${HELM_RELEASE_NAME}-canary"
|
|
245
|
+
# fi
|
|
246
|
+
|
|
247
|
+
# # Get a pod name from the deployment
|
|
248
|
+
# POD_NAME=$(kubectl get pods -l app.kubernetes.io/name=dv-pipecat,app.kubernetes.io/instance=$DEPLOYMENT_NAME --namespace=default -o jsonpath='{.items[0].metadata.name}' 2>/dev/null || echo "")
|
|
249
|
+
|
|
250
|
+
# if [ -n "$POD_NAME" ]; then
|
|
251
|
+
# echo "📦 Found running pod: $POD_NAME"
|
|
252
|
+
# echo "📊 Expected pipecat version: $PIPECAT_VERSION"
|
|
253
|
+
# echo "✅ Deployment verification completed"
|
|
254
|
+
# else
|
|
255
|
+
# echo "⚠️ Could not find running pod for verification"
|
|
256
|
+
# fi
|
|
257
|
+
|
|
258
|
+
# - name: Deployment success notification
|
|
259
|
+
# run: |
|
|
260
|
+
# if [ "${{ github.ref }}" == "refs/heads/dv-stage" ]; then
|
|
261
|
+
# ENVIRONMENT="🔧 Staging"
|
|
262
|
+
# NEXT_STEP="Ready for production deployment to dv-main"
|
|
263
|
+
# else
|
|
264
|
+
# ENVIRONMENT="🚀 Production Canary"
|
|
265
|
+
# NEXT_STEP="Ready for promotion to stable production"
|
|
266
|
+
# fi
|
|
267
|
+
|
|
268
|
+
# echo "🎉 DEPLOYMENT SUCCESS!"
|
|
269
|
+
# echo " Environment: $ENVIRONMENT"
|
|
270
|
+
# echo " Pipecat Version: $PIPECAT_VERSION"
|
|
271
|
+
# echo " Image: $REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME:$GITHUB_SHA"
|
|
272
|
+
# echo " Next Step: $NEXT_STEP"
|
|
273
|
+
|
|
274
|
+
# - name: Deployment failure notification
|
|
275
|
+
# if: failure()
|
|
276
|
+
# run: |
|
|
277
|
+
# echo "❌ DEPLOYMENT FAILED!"
|
|
278
|
+
# echo "🚨 The deployment encountered an error. Check the logs above for details."
|
|
279
|
+
|
|
280
|
+
# # Show recent events for debugging
|
|
281
|
+
# echo "🔍 Recent Kubernetes events:"
|
|
282
|
+
# kubectl get events --namespace=default --sort-by='.metadata.creationTimestamp' --field-selector type!=Normal | tail -10
|
|
283
|
+
|
|
284
|
+
# # Show deployment status
|
|
285
|
+
# if [ "${{ github.ref }}" == "refs/heads/dv-stage" ]; then
|
|
286
|
+
# kubectl describe deployment/$HELM_RELEASE_NAME --namespace=default || true
|
|
287
|
+
# else
|
|
288
|
+
# kubectl describe deployment/${HELM_RELEASE_NAME}-canary --namespace=default || true
|
|
289
|
+
# fi
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
name: Smart Auto-Release on PR Merge
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [closed]
|
|
6
|
+
branches: [dv-stage]
|
|
7
|
+
|
|
8
|
+
env:
|
|
9
|
+
PACKAGE_NAME: "dv-pipecat-ai"
|
|
10
|
+
REQUIREMENTS_FILE: "examples/ringg-chatbot/remote-requirements.txt"
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
smart-release:
|
|
14
|
+
if: github.event.pull_request.merged == true
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
permissions:
|
|
17
|
+
contents: write
|
|
18
|
+
pull-requests: write
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- name: Checkout code
|
|
22
|
+
uses: actions/checkout@v4
|
|
23
|
+
with:
|
|
24
|
+
fetch-depth: 0
|
|
25
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
26
|
+
|
|
27
|
+
- name: Set up Python
|
|
28
|
+
uses: actions/setup-python@v4
|
|
29
|
+
with:
|
|
30
|
+
python-version: '3.10'
|
|
31
|
+
|
|
32
|
+
- name: Install dependencies
|
|
33
|
+
run: |
|
|
34
|
+
python -m pip install --upgrade pip
|
|
35
|
+
pip install build twine requests packaging
|
|
36
|
+
|
|
37
|
+
- name: Check for src/pipecat changes
|
|
38
|
+
id: check-changes
|
|
39
|
+
run: |
|
|
40
|
+
echo "Checking for changes in src/pipecat..."
|
|
41
|
+
if git diff --name-only ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }} | grep -q "src/pipecat"; then
|
|
42
|
+
echo "HAS_PIPECAT_CHANGES=true" >> $GITHUB_OUTPUT
|
|
43
|
+
echo "✅ Found changes in src/pipecat"
|
|
44
|
+
else
|
|
45
|
+
echo "HAS_PIPECAT_CHANGES=false" >> $GITHUB_OUTPUT
|
|
46
|
+
echo "ℹ️ No changes in src/pipecat detected"
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
- name: Get current versions
|
|
50
|
+
if: steps.check-changes.outputs.HAS_PIPECAT_CHANGES == 'true'
|
|
51
|
+
id: versions
|
|
52
|
+
run: |
|
|
53
|
+
echo "Getting current versions..."
|
|
54
|
+
|
|
55
|
+
# Get latest PyPI version using helper script
|
|
56
|
+
PYPI_VERSION=$(python scripts/get-pypi-version.py ${{ env.PACKAGE_NAME }})
|
|
57
|
+
echo "PYPI_VERSION=$PYPI_VERSION" >> $GITHUB_OUTPUT
|
|
58
|
+
|
|
59
|
+
# Get remote-requirements.txt version
|
|
60
|
+
if [ -f "${{ env.REQUIREMENTS_FILE }}" ]; then
|
|
61
|
+
REQUIREMENTS_VERSION=$(grep "${{ env.PACKAGE_NAME }}" ${{ env.REQUIREMENTS_FILE }} | sed -n 's/.*==\([^]]*\).*/\1/p')
|
|
62
|
+
echo "REQUIREMENTS_VERSION=$REQUIREMENTS_VERSION" >> $GITHUB_OUTPUT
|
|
63
|
+
else
|
|
64
|
+
echo "REQUIREMENTS_VERSION=0.0.0.dev0" >> $GITHUB_OUTPUT
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
echo "📊 Version Status:"
|
|
68
|
+
echo " PyPI version: $PYPI_VERSION"
|
|
69
|
+
echo " Requirements version: $REQUIREMENTS_VERSION"
|
|
70
|
+
|
|
71
|
+
- name: Decide release action
|
|
72
|
+
if: steps.check-changes.outputs.HAS_PIPECAT_CHANGES == 'true'
|
|
73
|
+
id: decision
|
|
74
|
+
run: |
|
|
75
|
+
PYPI_VERSION="${{ steps.versions.outputs.PYPI_VERSION }}"
|
|
76
|
+
REQUIREMENTS_VERSION="${{ steps.versions.outputs.REQUIREMENTS_VERSION }}"
|
|
77
|
+
|
|
78
|
+
echo "🤔 Decision Logic:"
|
|
79
|
+
echo " PyPI version: $PYPI_VERSION"
|
|
80
|
+
echo " Requirements version: $REQUIREMENTS_VERSION"
|
|
81
|
+
|
|
82
|
+
if [ "$PYPI_VERSION" = "$REQUIREMENTS_VERSION" ]; then
|
|
83
|
+
echo "SHOULD_RELEASE=true" >> $GITHUB_OUTPUT
|
|
84
|
+
echo "REASON=Versions match - auto-bumping needed" >> $GITHUB_OUTPUT
|
|
85
|
+
echo "✅ Decision: AUTO-RELEASE (versions match)"
|
|
86
|
+
else
|
|
87
|
+
echo "SHOULD_RELEASE=false" >> $GITHUB_OUTPUT
|
|
88
|
+
echo "REASON=Developer already updated version" >> $GITHUB_OUTPUT
|
|
89
|
+
echo "⏭️ Decision: SKIP (developer handled versioning)"
|
|
90
|
+
fi
|
|
91
|
+
|
|
92
|
+
- name: Skip release notification
|
|
93
|
+
if: steps.check-changes.outputs.HAS_PIPECAT_CHANGES == 'false' || steps.decision.outputs.SHOULD_RELEASE == 'false'
|
|
94
|
+
run: |
|
|
95
|
+
if [ "${{ steps.check-changes.outputs.HAS_PIPECAT_CHANGES }}" = "false" ]; then
|
|
96
|
+
echo "⏭️ SKIPPING: No src/pipecat changes detected"
|
|
97
|
+
SKIP_REASON="No src/pipecat changes in this PR"
|
|
98
|
+
else
|
|
99
|
+
echo "⏭️ SKIPPING: ${{ steps.decision.outputs.REASON }}"
|
|
100
|
+
SKIP_REASON="Developer already updated version"
|
|
101
|
+
fi
|
|
102
|
+
echo "Skip reason: $SKIP_REASON"
|
|
103
|
+
|
|
104
|
+
- name: Calculate new version
|
|
105
|
+
if: steps.decision.outputs.SHOULD_RELEASE == 'true'
|
|
106
|
+
id: new-version
|
|
107
|
+
run: |
|
|
108
|
+
CURRENT_VERSION="${{ steps.versions.outputs.PYPI_VERSION }}"
|
|
109
|
+
echo "📈 Calculating new version from: $CURRENT_VERSION"
|
|
110
|
+
|
|
111
|
+
# Use helper script to increment version
|
|
112
|
+
NEW_VERSION=$(python scripts/increment-version.py "$CURRENT_VERSION")
|
|
113
|
+
|
|
114
|
+
echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_OUTPUT
|
|
115
|
+
echo "🚀 New version will be: $NEW_VERSION"
|
|
116
|
+
|
|
117
|
+
- name: Build package
|
|
118
|
+
if: steps.decision.outputs.SHOULD_RELEASE == 'true'
|
|
119
|
+
run: |
|
|
120
|
+
echo "🔨 Building package..."
|
|
121
|
+
python -m build
|
|
122
|
+
echo "✅ Package built successfully"
|
|
123
|
+
ls -la dist/
|
|
124
|
+
|
|
125
|
+
- name: Publish to PyPI
|
|
126
|
+
if: steps.decision.outputs.SHOULD_RELEASE == 'true'
|
|
127
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
128
|
+
with:
|
|
129
|
+
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
130
|
+
print-hash: true
|
|
131
|
+
verbose: true
|
|
132
|
+
|
|
133
|
+
- name: Update remote-requirements.txt
|
|
134
|
+
if: steps.decision.outputs.SHOULD_RELEASE == 'true'
|
|
135
|
+
run: |
|
|
136
|
+
NEW_VERSION="${{ steps.new-version.outputs.NEW_VERSION }}"
|
|
137
|
+
echo "📝 Updating ${{ env.REQUIREMENTS_FILE }} with version $NEW_VERSION"
|
|
138
|
+
|
|
139
|
+
# Update the version in remote-requirements.txt
|
|
140
|
+
sed -i.bak "s/${{ env.PACKAGE_NAME }}\[.*\]==.*/${{ env.PACKAGE_NAME }}[daily,cartesia,openai,silero,deepgram,azure,elevenlabs,google,groq,sentry,soundfile]==$NEW_VERSION/" ${{ env.REQUIREMENTS_FILE }}
|
|
141
|
+
|
|
142
|
+
# Show the change
|
|
143
|
+
echo "📋 Updated requirements file:"
|
|
144
|
+
grep "${{ env.PACKAGE_NAME }}" ${{ env.REQUIREMENTS_FILE }}
|
|
145
|
+
|
|
146
|
+
# Configure git
|
|
147
|
+
git config --local user.email "action@github.com"
|
|
148
|
+
git config --local user.name "GitHub Action"
|
|
149
|
+
|
|
150
|
+
# Commit the change
|
|
151
|
+
git add ${{ env.REQUIREMENTS_FILE }}
|
|
152
|
+
git commit -m "🤖 Auto-bump pipecat version to $NEW_VERSION"
|
|
153
|
+
|
|
154
|
+
# Push to dv-stage
|
|
155
|
+
git push origin HEAD:dv-stage
|
|
156
|
+
|
|
157
|
+
- name: Success notification
|
|
158
|
+
if: steps.decision.outputs.SHOULD_RELEASE == 'true'
|
|
159
|
+
run: |
|
|
160
|
+
NEW_VERSION="${{ steps.new-version.outputs.NEW_VERSION }}"
|
|
161
|
+
echo "🎉 SUCCESS: Auto-release completed!"
|
|
162
|
+
echo " 📦 Published: ${{ env.PACKAGE_NAME }} v$NEW_VERSION"
|
|
163
|
+
echo " 🔗 PyPI: https://pypi.org/project/${{ env.PACKAGE_NAME }}/$NEW_VERSION/"
|
|
164
|
+
echo " 📝 Updated: ${{ env.REQUIREMENTS_FILE }}"
|
|
165
|
+
echo " 🚀 Deployment will proceed automatically"
|
|
166
|
+
|
|
167
|
+
- name: Error notification
|
|
168
|
+
if: failure() && steps.decision.outputs.SHOULD_RELEASE == 'true'
|
|
169
|
+
run: |
|
|
170
|
+
echo "❌ ERROR: Auto-release failed!"
|
|
171
|
+
echo "Check the workflow logs for details."
|
|
@@ -36,6 +36,30 @@ ruff check --select I
|
|
|
36
36
|
./scripts/pre-commit.sh
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
+
### Release Management
|
|
40
|
+
**🚀 Smart Auto-Release System** - Automated version management and deployment
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Developer workflow (unchanged):
|
|
44
|
+
# 1. Make changes to src/pipecat
|
|
45
|
+
# 2. Create PR to dv-stage → Merge
|
|
46
|
+
# 3. Everything else is automatic!
|
|
47
|
+
|
|
48
|
+
# Manual version utilities (if needed):
|
|
49
|
+
python scripts/version-utils.py info # Check version status
|
|
50
|
+
python scripts/version-utils.py check # Verify version consistency
|
|
51
|
+
python scripts/version-utils.py update 0.0.75.dev123 # Manual version update
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**How it works:**
|
|
55
|
+
- ✅ **Auto-detects** when `src/pipecat` changes
|
|
56
|
+
- ✅ **Smart versioning** - only releases when needed
|
|
57
|
+
- ✅ **PyPI publishing** with error handling and retries
|
|
58
|
+
- ✅ **Deployment coordination** with package verification
|
|
59
|
+
- ✅ **Zero developer overhead** - respects manual versioning
|
|
60
|
+
|
|
61
|
+
See **[docs/AUTO_RELEASE.md](docs/AUTO_RELEASE.md)** for complete documentation.
|
|
62
|
+
|
|
39
63
|
### Ringg Chatbot Development (Primary Codebase)
|
|
40
64
|
The main development work happens in `examples/ringg-chatbot/`, which is a production telephony chatbot system.
|
|
41
65
|
|
|
@@ -252,6 +276,47 @@ For deep understanding of the Pipecat framework architecture:
|
|
|
252
276
|
- AI services integration (LLMService, STTService, TTSService)
|
|
253
277
|
- Complete code flow patterns and when to use different approaches
|
|
254
278
|
|
|
279
|
+
## Performance & Async Requirements
|
|
280
|
+
|
|
281
|
+
### Critical Performance Considerations
|
|
282
|
+
|
|
283
|
+
**⚡ Async Processing - Never Block the Event Loop**
|
|
284
|
+
- **MANDATORY**: All operations must be async and non-blocking
|
|
285
|
+
- Use `await` for I/O operations (file reads, network calls, database queries)
|
|
286
|
+
- Use `asyncio.create_task()` or `asyncio.gather()` for concurrent operations
|
|
287
|
+
- Never use blocking calls like `time.sleep()` - use `asyncio.sleep()` instead
|
|
288
|
+
- Avoid synchronous file I/O - use `aiofiles` or async equivalents
|
|
289
|
+
- Database operations must use async drivers (asyncpg, aiomysql, etc.)
|
|
290
|
+
|
|
291
|
+
**🎯 Ultra-Low Latency Voice AI**
|
|
292
|
+
- **Target**: Minimize time from "user stops speaking" → "bot starts speaking"
|
|
293
|
+
- **Critical Path**: STT processing → LLM response → TTS generation → audio output
|
|
294
|
+
- Every millisecond matters for natural conversation flow
|
|
295
|
+
- Optimize each pipeline stage for minimal latency:
|
|
296
|
+
- STT: Use streaming transcription services (Deepgram, AssemblyAI)
|
|
297
|
+
- LLM: Choose fast models, optimize prompts, use streaming responses
|
|
298
|
+
- TTS: Cache common responses, use low-latency providers (Cartesia, ElevenLabs)
|
|
299
|
+
- Audio: Minimize buffering, use real-time transport protocols
|
|
300
|
+
|
|
301
|
+
### Async Best Practices
|
|
302
|
+
```python
|
|
303
|
+
# ✅ Good - Non-blocking async operations
|
|
304
|
+
async def process_audio(audio_data):
|
|
305
|
+
tasks = [
|
|
306
|
+
asyncio.create_task(stt_service.transcribe(audio_data)),
|
|
307
|
+
asyncio.create_task(cache.get(cache_key))
|
|
308
|
+
]
|
|
309
|
+
results = await asyncio.gather(*tasks)
|
|
310
|
+
return results
|
|
311
|
+
|
|
312
|
+
# ❌ Bad - Blocking operations that freeze the event loop
|
|
313
|
+
def process_audio_bad(audio_data):
|
|
314
|
+
time.sleep(0.1) # Blocks entire event loop!
|
|
315
|
+
response = requests.get(url) # Synchronous HTTP call
|
|
316
|
+
with open('file.txt', 'r') as f: # Synchronous file I/O
|
|
317
|
+
data = f.read()
|
|
318
|
+
```
|
|
319
|
+
|
|
255
320
|
## Common Gotchas
|
|
256
321
|
|
|
257
322
|
- **For framework development**: Always activate virtual environment and use `pip install -e ".[provider,...]"`
|
|
@@ -259,4 +324,6 @@ For deep understanding of the Pipecat framework architecture:
|
|
|
259
324
|
- Pre-commit hooks enforce code formatting with Ruff
|
|
260
325
|
- Frame processors must handle both downstream and upstream flow
|
|
261
326
|
- Pipeline lifecycle: StartFrame → processing → EndFrame/StopFrame
|
|
262
|
-
- **Telephony**: WebSocket connections require proper call_id tracking and cleanup
|
|
327
|
+
- **Telephony**: WebSocket connections require proper call_id tracking and cleanup
|
|
328
|
+
- **Async**: Never block the event loop - use async/await for all I/O operations
|
|
329
|
+
- **Latency**: Voice AI requires sub-second response times - optimize every pipeline stage
|
{dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/dv_pipecat_ai.egg-info/SOURCES.txt
RENAMED
|
@@ -49,6 +49,7 @@ test-requirements.txt
|
|
|
49
49
|
.github/workflows/publish.yaml
|
|
50
50
|
.github/workflows/publish_test.yaml
|
|
51
51
|
.github/workflows/set-traffic-split.yml
|
|
52
|
+
.github/workflows/smart-auto-release.yml
|
|
52
53
|
.github/workflows/tests.yaml
|
|
53
54
|
create-new-machine/ansible.cfg
|
|
54
55
|
create-new-machine/ansible_setup.sh
|
{dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/convox.py
RENAMED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
#
|
|
6
6
|
|
|
7
7
|
import base64
|
|
8
|
+
import datetime
|
|
8
9
|
import json
|
|
9
10
|
from typing import Optional
|
|
10
11
|
|
|
@@ -14,6 +15,7 @@ from pydantic import BaseModel
|
|
|
14
15
|
from pipecat.audio.utils import create_default_resampler
|
|
15
16
|
from pipecat.frames.frames import (
|
|
16
17
|
AudioRawFrame,
|
|
18
|
+
CancelFrame,
|
|
17
19
|
EndFrame,
|
|
18
20
|
Frame,
|
|
19
21
|
InputAudioRawFrame,
|
|
@@ -117,7 +119,7 @@ class ConVoxFrameSerializer(FrameSerializer):
|
|
|
117
119
|
if self._call_ended:
|
|
118
120
|
logger.debug("🎵 CONVOX SERIALIZE: Skipping audio - call has ended")
|
|
119
121
|
return None
|
|
120
|
-
|
|
122
|
+
|
|
121
123
|
# Convert PCM audio to ConVox format
|
|
122
124
|
data = frame.audio
|
|
123
125
|
# logger.info(
|
|
@@ -134,11 +136,8 @@ class ConVoxFrameSerializer(FrameSerializer):
|
|
|
134
136
|
|
|
135
137
|
# Encode as base64 for transmission
|
|
136
138
|
payload = base64.b64encode(serialized_data).decode("ascii")
|
|
137
|
-
logger.info(f"🎵 CONVOX SERIALIZE: Base64 encoded - {len(payload)} characters")
|
|
138
139
|
|
|
139
140
|
# ConVox expects play_audio event format according to the documentation
|
|
140
|
-
import datetime
|
|
141
|
-
|
|
142
141
|
timestamp = datetime.datetime.now().isoformat()
|
|
143
142
|
|
|
144
143
|
message = {
|
|
@@ -253,15 +252,11 @@ class ConVoxFrameSerializer(FrameSerializer):
|
|
|
253
252
|
elif event == "end_call" or event == "call_end":
|
|
254
253
|
logger.info("ConVox call end event received")
|
|
255
254
|
self._call_ended = True
|
|
256
|
-
return
|
|
255
|
+
return CancelFrame()
|
|
257
256
|
|
|
258
257
|
elif event == "failed":
|
|
259
258
|
logger.info(f"ConVox failed event received: {message}")
|
|
260
259
|
self._call_ended = True
|
|
261
|
-
return
|
|
262
|
-
|
|
263
|
-
else:
|
|
264
|
-
logger.debug(f"Unhandled ConVox event: {event}")
|
|
265
|
-
return None
|
|
260
|
+
return CancelFrame()
|
|
266
261
|
|
|
267
262
|
return None
|
{dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/deepgram/stt.py
RENAMED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
"""Deepgram speech-to-text service implementation."""
|
|
8
8
|
|
|
9
|
+
import logging
|
|
9
10
|
from typing import AsyncGenerator, Dict, Optional
|
|
10
11
|
|
|
11
12
|
from loguru import logger
|
|
@@ -116,7 +117,11 @@ class DeepgramSTTService(STTService):
|
|
|
116
117
|
api_key,
|
|
117
118
|
config=DeepgramClientOptions(
|
|
118
119
|
url=base_url,
|
|
119
|
-
options={
|
|
120
|
+
options={
|
|
121
|
+
"keepalive": "true",
|
|
122
|
+
# "termination_exception_connect": True, # Enable exception propagation
|
|
123
|
+
},
|
|
124
|
+
verbose=logging.ERROR, # Enable warning level and above logging
|
|
120
125
|
),
|
|
121
126
|
)
|
|
122
127
|
|
|
@@ -36,7 +36,7 @@ from pipecat.utils.asyncio.watchdog_async_iterator import WatchdogAsyncIterator
|
|
|
36
36
|
|
|
37
37
|
try:
|
|
38
38
|
from fastapi import WebSocket
|
|
39
|
-
from starlette.websockets import WebSocketState
|
|
39
|
+
from starlette.websockets import WebSocketDisconnect, WebSocketState
|
|
40
40
|
except ModuleNotFoundError as e:
|
|
41
41
|
logger.error(f"Exception: {e}")
|
|
42
42
|
logger.error(
|
|
@@ -87,16 +87,22 @@ class FastAPIWebsocketClient:
|
|
|
87
87
|
else:
|
|
88
88
|
await self._websocket.send_text(data)
|
|
89
89
|
except Exception as e:
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
90
|
+
if isinstance(e, WebSocketDisconnect):
|
|
91
|
+
logger.warning(
|
|
92
|
+
f"{self} WebSocket disconnected during send: {e}, application_state: {self._websocket.application_state}",
|
|
93
|
+
call_id=self._conversation_id,
|
|
94
|
+
)
|
|
95
|
+
else:
|
|
96
|
+
logger.error(
|
|
97
|
+
f"{self} exception sending data: {e.__class__.__name__} ({e}), application_state: {self._websocket.application_state}",
|
|
98
|
+
call_id=self._conversation_id,
|
|
99
|
+
)
|
|
97
100
|
# For some reason the websocket is disconnected, and we are not able to send data
|
|
98
|
-
# So let's properly handle it and disconnect the transport
|
|
99
|
-
if
|
|
101
|
+
# So let's properly handle it and disconnect the transport if it is not already disconnecting
|
|
102
|
+
if (
|
|
103
|
+
self._websocket.application_state == WebSocketState.DISCONNECTED
|
|
104
|
+
and not self.is_closing
|
|
105
|
+
):
|
|
100
106
|
logger.warning(
|
|
101
107
|
"Closing already disconnected websocket!", call_id=self._conversation_id
|
|
102
108
|
)
|
|
@@ -109,8 +115,12 @@ class FastAPIWebsocketClient:
|
|
|
109
115
|
return
|
|
110
116
|
if self.is_connected and not self.is_closing:
|
|
111
117
|
self._closing = True
|
|
112
|
-
|
|
113
|
-
|
|
118
|
+
try:
|
|
119
|
+
await self._websocket.close()
|
|
120
|
+
except Exception as e:
|
|
121
|
+
logger.error(f"{self} exception while closing the websocket: {e}")
|
|
122
|
+
finally:
|
|
123
|
+
await self.trigger_client_disconnected()
|
|
114
124
|
|
|
115
125
|
async def trigger_client_disconnected(self):
|
|
116
126
|
await self._callbacks.on_client_disconnected(self._websocket)
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/1-bug_report.yml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/2-question.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/5-new-service.yml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/6-dependency.yml
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/config.yml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/PULL_REQUEST_TEMPLATE.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/promote-prod.yml
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/publish_test.yaml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.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
|