dv-pipecat-ai 0.0.82.dev881__tar.gz → 0.0.85.dev1__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.
Potentially problematic release.
This version of dv-pipecat-ai might be problematic. Click here for more details.
- dv_pipecat_ai-0.0.85.dev1/.github/workflows/github.yml +414 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/PKG-INFO +2 -1
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/pyproject.toml +1 -1
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/dv_pipecat_ai.egg-info/PKG-INFO +2 -1
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/dv_pipecat_ai.egg-info/SOURCES.txt +4 -3
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/dv_pipecat_ai.egg-info/requires.txt +1 -0
- dv_pipecat_ai-0.0.85.dev1/src/pipecat/audio/vad/data/silero_vad_v2.onnx +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/vad/silero.py +9 -3
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/frames/frames.py +49 -0
- dv_pipecat_ai-0.0.85.dev1/src/pipecat/pipeline/tts_switcher.py +30 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/aggregators/dtmf_aggregator.py +22 -29
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/aggregators/llm_response.py +2 -0
- dv_pipecat_ai-0.0.85.dev1/src/pipecat/processors/dtmf_aggregator.py +255 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/filters/stt_mute_filter.py +15 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/user_idle_processor.py +32 -5
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/serializers/__init__.py +3 -1
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/serializers/convox.py +40 -3
- dv_pipecat_ai-0.0.85.dev1/src/pipecat/serializers/custom.py +257 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/serializers/plivo.py +4 -1
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/elevenlabs/stt.py +18 -8
- dv_pipecat_ai-0.0.85.dev1/src/pipecat/services/sarvam/__init__.py +15 -0
- dv_pipecat_ai-0.0.85.dev1/src/pipecat/services/sarvam/stt.py +540 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/sarvam/tts.py +13 -1
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/speechmatics/stt.py +16 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/vistaar/llm.py +45 -7
- dv_pipecat_ai-0.0.82.dev881/.github/workflows/github.yml +0 -402
- dv_pipecat_ai-0.0.82.dev881/.github/workflows/smart-auto-release.yml +0 -192
- dv_pipecat_ai-0.0.82.dev881/src/pipecat/processors/dtmf_aggregator.py +0 -154
- dv_pipecat_ai-0.0.82.dev881/src/pipecat/serializers/genesys.py +0 -95
- dv_pipecat_ai-0.0.82.dev881/src/pipecat/services/google/test-google-chirp.py +0 -45
- dv_pipecat_ai-0.0.82.dev881/src/pipecat/services/sarvam/__init__.py +0 -8
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.dockerignore +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/workflows/build.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/workflows/coverage.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/workflows/format.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/workflows/promote-prod.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/workflows/publish.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/workflows/publish_test.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/workflows/python-compatibility.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/workflows/set-traffic-split.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/workflows/sync-quickstart.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.github/workflows/tests.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.gitignore +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.pre-commit-config.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/.readthedocs.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/CHANGELOG.md +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/CHANGELOG.md.template +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/CLAUDE.md +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/CONTRIBUTING.md +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/DOCKER_BUILD_OPTIMIZATION_SUMMARY.md +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/LICENSE +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/MANIFEST.in +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/README.md +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/ansible.cfg +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/ansible_deployment.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/cleanup_old_containers.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/codecov.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/create-new-machine/ansible.cfg +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/create-new-machine/ansible_setup.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/create-new-machine/inventory.ini +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/create-new-machine/replace_env.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/create-new-machine/setup_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/create_inventory.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/delete_old_dockers.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/deploy.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/deploy_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/docker-compose.dev.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/dump_logs.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/env.example +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/fetch_logs.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/inventory.ini +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/.helmignore +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/Chart.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/templates/cluster-role.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/templates/keda-api-key-secret.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/templates/keda-scaledobject.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/templates/keda-trigger-auth.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/templates/pdb.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/templates/service.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/values-canary.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/values-prod.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/values-stage.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/dv-pipecat/values.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/k8s/istio/destination-virtualservice.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/merge-code-into-single-file.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/pipecat.png +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/restart.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/restart_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/setup.cfg +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/adapters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/adapters/base_llm_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/adapters/schemas/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/adapters/schemas/direct_function.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/adapters/schemas/function_schema.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/adapters/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/dtmf/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/dtmf/dtmf-0.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/dtmf/dtmf-1.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/dtmf/dtmf-2.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/dtmf/dtmf-3.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/dtmf/dtmf-4.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/dtmf/dtmf-5.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/dtmf/dtmf-6.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/dtmf/dtmf-7.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/dtmf/dtmf-8.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/dtmf/dtmf-9.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/dtmf/dtmf-pound.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/dtmf/dtmf-star.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/dtmf/types.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/dtmf/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/filters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/filters/aic_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/filters/koala_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/filters/krisp_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/filters/pyrnn_local_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/interruptions/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/mixers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/resamplers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/resamplers/soxr_stream_resampler.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/turn/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v2.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/vad/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/vad/data/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/clocks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/clocks/base_clock.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/clocks/system_clock.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/extensions/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/extensions/ivr/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/extensions/ivr/ivr_navigator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/extensions/voicemail/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/extensions/voicemail/voicemail_detector.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/frames/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/frames/frames.proto +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/metrics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/metrics/metrics.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/observers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/observers/base_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/observers/loggers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/observers/turn_tracking_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/pipeline/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/pipeline/base_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/pipeline/base_task.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/pipeline/llm_switcher.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/pipeline/pipeline.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/pipeline/runner.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/pipeline/service_switcher.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/pipeline/task.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/pipeline/task_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/aggregators/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/aggregators/gated.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/aggregators/gated_openai_llm_context.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/aggregators/llm_context.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/aggregators/llm_response_universal.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/aggregators/sentence.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/aggregators/user_response.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/async_generator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/audio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/consumer_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/filters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/filters/frame_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/filters/function_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/filters/identity_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/filters/null_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/frame_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/frameworks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/frameworks/langchain.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/frameworks/rtvi.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/gstreamer/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/idle_frame_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/logger.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/metrics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/metrics/frame_processor_metrics.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/metrics/sentry.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/producer_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/text_transformer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/transcript_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/py.typed +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/runner/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/runner/daily.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/runner/livekit.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/runner/run.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/runner/types.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/runner/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/serializers/asterisk.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/serializers/base_serializer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/serializers/exotel.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/serializers/livekit.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/serializers/protobuf.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/serializers/telnyx.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/serializers/twilio.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/ai_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/ai_services.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/anthropic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/anthropic/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/assemblyai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/assemblyai/models.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/assemblyai/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/asyncai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/asyncai/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/aws/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/aws/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/aws/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/aws/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/aws/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/aws_nova_sonic/ready.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/azure/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/azure/common.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/azure/image.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/azure/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/azure/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/azure/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/cartesia/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/cartesia/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/cartesia/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/cerebras/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/cerebras/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/deepgram/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/deepgram/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/deepgram/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/deepseek/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/deepseek/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/elevenlabs/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/elevenlabs/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/fal/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/fal/image.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/fal/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/fireworks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/fireworks/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/fish/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/fish/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/gemini_multimodal_live/file_api.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/gladia/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/gladia/config.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/gladia/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/google/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/google/frames.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/google/google.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/google/image.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/google/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/google/llm_openai.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/google/llm_vertex.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/google/rtvi.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/google/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/google/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/grok/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/grok/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/groq/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/groq/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/groq/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/groq/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/hamsa/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/hamsa/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/heygen/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/heygen/api.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/heygen/client.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/heygen/video.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/image_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/inworld/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/inworld/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/llm_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/lmnt/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/lmnt/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/mcp_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/mem0/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/mem0/memory.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/minimax/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/minimax/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/mistral/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/mistral/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/moondream/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/moondream/vision.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/neuphonic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/neuphonic/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/nim/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/nim/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/ollama/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/ollama/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openai/base_llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openai/image.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openai/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openai/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openai/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openpipe/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openpipe/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openrouter/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/openrouter/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/perplexity/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/perplexity/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/piper/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/piper/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/playht/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/playht/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/qwen/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/qwen/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/rime/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/rime/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/riva/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/riva/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/riva/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/sambanova/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/sambanova/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/sambanova/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/simli/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/simli/video.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/soniox/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/soniox/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/speechmatics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/stt_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/tavus/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/tavus/video.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/together/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/together/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/tts_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/ultravox/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/ultravox/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/vision_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/vistaar/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/websocket_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/whisper/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/whisper/base_stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/whisper/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/xtts/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/services/xtts/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/sync/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/sync/base_notifier.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/sync/event_notifier.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/tests/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/tests/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transcriptions/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transcriptions/language.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/base_input.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/base_output.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/base_transport.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/daily/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/daily/transport.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/daily/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/livekit/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/livekit/transport.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/local/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/local/audio.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/local/tk.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/network/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/network/fastapi_websocket.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/network/small_webrtc.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/network/webrtc_connection.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/network/websocket_client.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/network/websocket_server.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/services/daily.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/services/helpers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/services/livekit.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/services/tavus.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/smallwebrtc/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/smallwebrtc/connection.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/smallwebrtc/transport.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/tavus/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/tavus/transport.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/websocket/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/websocket/client.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/websocket/fastapi.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/websocket/server.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/whatsapp/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/whatsapp/api.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/transports/whatsapp/client.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/asyncio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/asyncio/task_manager.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/base_object.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/logger_config.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/network.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/string.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/text/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/text/base_text_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/time.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/tracing/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/tracing/class_decorators.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/tracing/service_attributes.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/tracing/service_decorators.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/tracing/setup.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/pipecat/utils/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/stop_container.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/test_elevenlabs_stt_segmented.py +0 -0
- {dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/uv.lock +0 -0
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
name: Build and Deploy to Kubernetes
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- dv-stage # Trigger only on pushes to this specific branch.
|
|
7
|
+
- dv-main
|
|
8
|
+
- test/deployment_cache
|
|
9
|
+
|
|
10
|
+
env:
|
|
11
|
+
PROJECT_ID: desivocalprod01
|
|
12
|
+
REGION: asia-south1
|
|
13
|
+
REPOSITORY: ${{ github.ref == 'refs/heads/dv-main' && 'ringg-registry-prod' || 'ringg-registry-stage' }}
|
|
14
|
+
IMAGE_NAME: dv-pipecat
|
|
15
|
+
# Determine cluster and secrets based on the target branch (dv-main for prod, others for stage)
|
|
16
|
+
CLUSTER: ${{ github.ref == 'refs/heads/dv-main' && 'desivocal-prod-us-e1-cluster' || 'desivocal-staging-cluster' }}
|
|
17
|
+
CLUSTER_ZONE: ${{ github.ref == 'refs/heads/dv-main' && 'us-east1' || 'asia-south1-a' }}
|
|
18
|
+
GITHUB_SHA: ${{ github.sha }}
|
|
19
|
+
# Assuming secrets are named like PROD_SECRETS_JSON / STAGE_SECRETS_JSON etc.
|
|
20
|
+
# SECRETS_JSON should contain a JSON object like {"VAR1": "value1", "VAR2": "value2"}
|
|
21
|
+
SECRETS_JSON: ${{ github.ref == 'refs/heads/dv-main' && secrets.PROD_SECRETS_JSON || secrets.STAGE_SECRETS_JSON }}
|
|
22
|
+
# CREDS_JSON should contain the raw content of the creds.json file
|
|
23
|
+
CREDS_JSON: ${{ github.ref == 'refs/heads/dv-main' && secrets.PROD_CREDS_JSON || secrets.STAGE_CREDS_JSON }}
|
|
24
|
+
# Helm release name
|
|
25
|
+
HELM_RELEASE_NAME: dv-pipecat
|
|
26
|
+
|
|
27
|
+
jobs:
|
|
28
|
+
build-and-deploy:
|
|
29
|
+
# Skip dv-stage runs that are only the auto-bump commit we just pushed
|
|
30
|
+
if: github.ref != 'refs/heads/dv-stage' || !contains(github.event.head_commit.message, 'Auto-bump dv-pipecat-ai')
|
|
31
|
+
runs-on: ubuntu-latest
|
|
32
|
+
permissions:
|
|
33
|
+
contents: write
|
|
34
|
+
id-token: write # Required for Workload Identity Federation
|
|
35
|
+
|
|
36
|
+
steps:
|
|
37
|
+
- name: Checkout code
|
|
38
|
+
uses: actions/checkout@v4
|
|
39
|
+
with:
|
|
40
|
+
ref: ${{ github.ref }}
|
|
41
|
+
fetch-depth: 0
|
|
42
|
+
|
|
43
|
+
# Integrated smart auto-release logic (moved from smart-auto-release.yml)
|
|
44
|
+
- name: Set up Python
|
|
45
|
+
uses: actions/setup-python@v4
|
|
46
|
+
with:
|
|
47
|
+
python-version: '3.10'
|
|
48
|
+
|
|
49
|
+
- name: Install build tooling
|
|
50
|
+
if: github.ref == 'refs/heads/dv-stage'
|
|
51
|
+
run: |
|
|
52
|
+
python -m pip install --upgrade pip
|
|
53
|
+
pip install build requests packaging
|
|
54
|
+
|
|
55
|
+
- name: Check for src/pipecat changes (push diff)
|
|
56
|
+
if: github.ref == 'refs/heads/dv-stage'
|
|
57
|
+
id: check_changes
|
|
58
|
+
run: |
|
|
59
|
+
echo "Checking for changes in src/pipecat between ${{ github.event.before }} and ${{ github.sha }}..."
|
|
60
|
+
if git diff --name-only ${{ github.event.before }}..${{ github.sha }} | grep -q "^src/pipecat"; then
|
|
61
|
+
echo "has_pipecat_changes=true" >> $GITHUB_OUTPUT
|
|
62
|
+
echo "✅ Found changes in src/pipecat"
|
|
63
|
+
else
|
|
64
|
+
echo "has_pipecat_changes=false" >> $GITHUB_OUTPUT
|
|
65
|
+
echo "ℹ️ No changes in src/pipecat detected"
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
- name: Get dv-pipecat-ai versions (before vs after)
|
|
69
|
+
if: github.ref == 'refs/heads/dv-stage' && steps.check_changes.outputs.has_pipecat_changes == 'true'
|
|
70
|
+
id: versions
|
|
71
|
+
env:
|
|
72
|
+
REQUIREMENTS_FILE: examples/ringg-chatbot/remote-requirements.txt
|
|
73
|
+
PACKAGE_NAME: dv-pipecat-ai
|
|
74
|
+
run: |
|
|
75
|
+
echo "Getting current and previous ${PACKAGE_NAME} versions from ${REQUIREMENTS_FILE}..."
|
|
76
|
+
|
|
77
|
+
# Current merged version (after)
|
|
78
|
+
if [ -f "$REQUIREMENTS_FILE" ]; then
|
|
79
|
+
MERGED_REQUIREMENTS_VERSION=$(grep "${PACKAGE_NAME}" "$REQUIREMENTS_FILE" | sed -n 's/.*==\([^]]*\).*/\1/p')
|
|
80
|
+
fi
|
|
81
|
+
if [ -z "$MERGED_REQUIREMENTS_VERSION" ]; then
|
|
82
|
+
MERGED_REQUIREMENTS_VERSION="0.0.0.dev0"
|
|
83
|
+
fi
|
|
84
|
+
echo "merged_requirements_version=$MERGED_REQUIREMENTS_VERSION" >> $GITHUB_OUTPUT
|
|
85
|
+
|
|
86
|
+
# Previous version (before)
|
|
87
|
+
git show ${{ github.event.before }}:"$REQUIREMENTS_FILE" > before_requirements.txt 2>/dev/null || echo "${PACKAGE_NAME}==0.0.0.dev0" > before_requirements.txt
|
|
88
|
+
BASE_REQUIREMENTS_VERSION=$(grep "${PACKAGE_NAME}" before_requirements.txt | sed -n 's/.*==\([^]]*\).*/\1/p')
|
|
89
|
+
if [ -z "$BASE_REQUIREMENTS_VERSION" ]; then
|
|
90
|
+
BASE_REQUIREMENTS_VERSION="0.0.0.dev0"
|
|
91
|
+
fi
|
|
92
|
+
echo "base_requirements_version=$BASE_REQUIREMENTS_VERSION" >> $GITHUB_OUTPUT
|
|
93
|
+
|
|
94
|
+
echo "📊 Version Status:"
|
|
95
|
+
echo " Base (before) requirements version: $BASE_REQUIREMENTS_VERSION"
|
|
96
|
+
echo " Merged (after) requirements version: $MERGED_REQUIREMENTS_VERSION"
|
|
97
|
+
|
|
98
|
+
- name: Decide auto-release action
|
|
99
|
+
if: github.ref == 'refs/heads/dv-stage' && steps.check_changes.outputs.has_pipecat_changes == 'true'
|
|
100
|
+
id: decision
|
|
101
|
+
run: |
|
|
102
|
+
BASE_VERSION="${{ steps.versions.outputs.base_requirements_version }}"
|
|
103
|
+
MERGED_VERSION="${{ steps.versions.outputs.merged_requirements_version }}"
|
|
104
|
+
|
|
105
|
+
echo "🤔 Decision Logic:"
|
|
106
|
+
echo " Base version: $BASE_VERSION"
|
|
107
|
+
echo " Merged version: $MERGED_VERSION"
|
|
108
|
+
|
|
109
|
+
if [ "$BASE_VERSION" = "$MERGED_VERSION" ]; then
|
|
110
|
+
echo "should_release=true" >> $GITHUB_OUTPUT
|
|
111
|
+
echo "reason=Versions match between before/after - auto-bump needed" >> $GITHUB_OUTPUT
|
|
112
|
+
echo "✅ Decision: AUTO-RELEASE"
|
|
113
|
+
else
|
|
114
|
+
echo "should_release=false" >> $GITHUB_OUTPUT
|
|
115
|
+
echo "reason=Version already changed in the merge" >> $GITHUB_OUTPUT
|
|
116
|
+
echo "⏭️ Decision: SKIP (developer updated version)"
|
|
117
|
+
fi
|
|
118
|
+
|
|
119
|
+
- name: Build package (setuptools_scm)
|
|
120
|
+
if: github.ref == 'refs/heads/dv-stage' && steps.decision.outputs.should_release == 'true'
|
|
121
|
+
run: |
|
|
122
|
+
echo "🔨 Building package..."
|
|
123
|
+
python -m build
|
|
124
|
+
ls -la dist/
|
|
125
|
+
|
|
126
|
+
- name: Extract built version
|
|
127
|
+
if: github.ref == 'refs/heads/dv-stage' && steps.decision.outputs.should_release == 'true'
|
|
128
|
+
id: extract_version
|
|
129
|
+
run: |
|
|
130
|
+
WHEEL_FILE=$(ls dist/*.whl | head -1)
|
|
131
|
+
BUILT_VERSION=$(echo "$WHEEL_FILE" | sed -E 's/.*-([0-9]+\.[0-9]+\.[0-9]+\.dev[0-9]+)-.*/\1/')
|
|
132
|
+
echo "built_version=$BUILT_VERSION" >> $GITHUB_OUTPUT
|
|
133
|
+
echo "🔍 Built version: $BUILT_VERSION"
|
|
134
|
+
# Verify tar.gz matches
|
|
135
|
+
TAR_FILE=$(ls dist/*.tar.gz | head -1)
|
|
136
|
+
TAR_VERSION=$(echo "$TAR_FILE" | sed -E 's/.*-([0-9]+\.[0-9]+\.[0-9]+\.dev[0-9]+)\.tar\.gz/\1/')
|
|
137
|
+
[ "$BUILT_VERSION" = "$TAR_VERSION" ] || { echo "❌ Version mismatch"; exit 1; }
|
|
138
|
+
|
|
139
|
+
- name: Publish to PyPI
|
|
140
|
+
if: github.ref == 'refs/heads/dv-stage' && steps.decision.outputs.should_release == 'true'
|
|
141
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
142
|
+
with:
|
|
143
|
+
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
144
|
+
print-hash: true
|
|
145
|
+
verbose: true
|
|
146
|
+
|
|
147
|
+
# - name: Update remote-requirements.txt with built version and push
|
|
148
|
+
# if: github.ref == 'refs/heads/dv-stage' && steps.decision.outputs.should_release == 'true'
|
|
149
|
+
# env:
|
|
150
|
+
# REQUIREMENTS_FILE: examples/ringg-chatbot/remote-requirements.txt
|
|
151
|
+
# PACKAGE_NAME: dv-pipecat-ai
|
|
152
|
+
# run: |
|
|
153
|
+
# BUILT_VERSION="${{ steps.extract_version.outputs.built_version }}"
|
|
154
|
+
# echo "📝 Updating ${REQUIREMENTS_FILE} to ${PACKAGE_NAME}==${BUILT_VERSION} (preserve extras)"
|
|
155
|
+
# CURRENT_DEPS=$(grep "${PACKAGE_NAME}" "$REQUIREMENTS_FILE" | sed -n 's/.*\[\([^]]*\)\].*/\1/p')
|
|
156
|
+
# if [ -z "$CURRENT_DEPS" ]; then
|
|
157
|
+
# # No extras bracket found; keep line format simple
|
|
158
|
+
# sed -i.bak "s/${PACKAGE_NAME}==.*/${PACKAGE_NAME}==${BUILT_VERSION}/" "$REQUIREMENTS_FILE"
|
|
159
|
+
# else
|
|
160
|
+
# sed -i.bak "s/${PACKAGE_NAME}\[.*\]==.*/${PACKAGE_NAME}[$CURRENT_DEPS]==${BUILT_VERSION}/" "$REQUIREMENTS_FILE"
|
|
161
|
+
# fi
|
|
162
|
+
# grep "${PACKAGE_NAME}" "$REQUIREMENTS_FILE"
|
|
163
|
+
|
|
164
|
+
# git config --local user.email "action@github.com"
|
|
165
|
+
# git config --local user.name "GitHub Action"
|
|
166
|
+
# git add "$REQUIREMENTS_FILE"
|
|
167
|
+
# git commit -m "🤖 Auto-bump ${PACKAGE_NAME} to ${BUILT_VERSION}"
|
|
168
|
+
# git push origin HEAD:dv-stage
|
|
169
|
+
|
|
170
|
+
# - name: Log auto-release skip reason
|
|
171
|
+
# if: github.ref == 'refs/heads/dv-stage' && (steps.check_changes.outputs.has_pipecat_changes == 'false' || steps.decision.outputs.should_release == 'false')
|
|
172
|
+
# run: |
|
|
173
|
+
# if [ "${{ steps.check_changes.outputs.has_pipecat_changes }}" = "false" ]; then
|
|
174
|
+
# echo "⏭️ SKIPPING auto-release: No src/pipecat changes detected"
|
|
175
|
+
# else
|
|
176
|
+
# echo "⏭️ SKIPPING auto-release: ${{ steps.decision.outputs.reason }}"
|
|
177
|
+
# fi
|
|
178
|
+
|
|
179
|
+
# # Python already set up above
|
|
180
|
+
|
|
181
|
+
# - name: Install Python dependencies
|
|
182
|
+
# run: |
|
|
183
|
+
# python -m pip install --upgrade pip
|
|
184
|
+
# pip install requests packaging
|
|
185
|
+
|
|
186
|
+
# - name: Verify PyPI package availability
|
|
187
|
+
# run: |
|
|
188
|
+
# echo "🔍 Verifying PyPI package availability..."
|
|
189
|
+
|
|
190
|
+
# # Get version from remote-requirements.txt
|
|
191
|
+
# PIPECAT_VERSION=$(grep "dv-pipecat-ai" examples/ringg-chatbot/remote-requirements.txt | sed -n 's/.*==\([^]]*\).*/\1/p')
|
|
192
|
+
# echo "📦 Required pipecat version: $PIPECAT_VERSION"
|
|
193
|
+
|
|
194
|
+
# # Verify package is available on PyPI with retry logic
|
|
195
|
+
# MAX_ATTEMPTS=12
|
|
196
|
+
# ATTEMPT=1
|
|
197
|
+
# WAIT_TIME=5
|
|
198
|
+
# PACKAGE_AVAILABLE=false
|
|
199
|
+
|
|
200
|
+
# while [ $ATTEMPT -le $MAX_ATTEMPTS ]; do
|
|
201
|
+
# echo "🔍 Attempt $ATTEMPT/$MAX_ATTEMPTS: Checking PyPI for dv-pipecat-ai==$PIPECAT_VERSION"
|
|
202
|
+
|
|
203
|
+
# if python scripts/check-pypi-package.py dv-pipecat-ai "$PIPECAT_VERSION"; then
|
|
204
|
+
# PACKAGE_AVAILABLE=true
|
|
205
|
+
# echo "✅ PyPI package verification successful!"
|
|
206
|
+
# break
|
|
207
|
+
# else
|
|
208
|
+
# if [ $ATTEMPT -eq $MAX_ATTEMPTS ]; then
|
|
209
|
+
# echo "❌ FAILED: Package dv-pipecat-ai==$PIPECAT_VERSION not available on PyPI after $MAX_ATTEMPTS attempts"
|
|
210
|
+
# echo "🚨 This usually means:"
|
|
211
|
+
# echo " 1. The auto-release workflow failed to publish"
|
|
212
|
+
# echo " 2. PyPI is experiencing delays"
|
|
213
|
+
# echo " 3. Version mismatch between requirements.txt and PyPI"
|
|
214
|
+
# exit 1
|
|
215
|
+
# else
|
|
216
|
+
# echo "⏳ Package not yet available, waiting ${WAIT_TIME}s before retry..."
|
|
217
|
+
# sleep $WAIT_TIME
|
|
218
|
+
# # Exponential backoff with cap at 30s
|
|
219
|
+
# if [ $WAIT_TIME -lt 30 ]; then
|
|
220
|
+
# WAIT_TIME=$((WAIT_TIME * 2))
|
|
221
|
+
# if [ $WAIT_TIME -gt 30 ]; then WAIT_TIME=30; fi
|
|
222
|
+
# fi
|
|
223
|
+
# fi
|
|
224
|
+
# fi
|
|
225
|
+
# ATTEMPT=$((ATTEMPT + 1))
|
|
226
|
+
# done
|
|
227
|
+
|
|
228
|
+
# echo "PIPECAT_VERSION=$PIPECAT_VERSION" >> $GITHUB_ENV
|
|
229
|
+
|
|
230
|
+
# - name: Authenticate to GCP using Workload Identity Federation
|
|
231
|
+
# id: auth
|
|
232
|
+
# uses: google-github-actions/auth@v2
|
|
233
|
+
# with:
|
|
234
|
+
# workload_identity_provider: projects/623676891410/locations/global/workloadIdentityPools/desivocal-staging-pool/providers/github # TODO: Update for production if needed
|
|
235
|
+
# service_account: gke-githubactions-svc-stage@desivocalprod01.iam.gserviceaccount.com # TODO: Update for production if needed
|
|
236
|
+
|
|
237
|
+
# - name: Configure gcloud
|
|
238
|
+
# run: |
|
|
239
|
+
# gcloud config set project $PROJECT_ID
|
|
240
|
+
# gcloud auth configure-docker $REGION-docker.pkg.dev --quiet
|
|
241
|
+
|
|
242
|
+
# - name: Set up Docker Buildx
|
|
243
|
+
# uses: docker/setup-buildx-action@v3
|
|
244
|
+
|
|
245
|
+
# - name: Build & push image (with GHA cache)
|
|
246
|
+
# uses: docker/build-push-action@v6
|
|
247
|
+
# with:
|
|
248
|
+
# context: ./examples/ringg-chatbot
|
|
249
|
+
# file: ./examples/ringg-chatbot/remote-Dockerfile
|
|
250
|
+
# platforms: linux/${{ github.ref == 'refs/heads/dv-main' && 'arm64' || 'amd64' }}
|
|
251
|
+
# push: true
|
|
252
|
+
# tags: ${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.IMAGE_NAME }}:${{ env.GITHUB_SHA }}
|
|
253
|
+
# cache-from: type=gha,scope=${{ github.ref == 'refs/heads/dv-main' && 'arm64' || 'amd64' }}
|
|
254
|
+
# cache-to: type=gha,mode=max,scope=${{ github.ref == 'refs/heads/dv-main' && 'arm64' || 'amd64' }}
|
|
255
|
+
# provenance: 'false'
|
|
256
|
+
|
|
257
|
+
# # - name: Build Docker image
|
|
258
|
+
# # run: |
|
|
259
|
+
# # cd examples/ringg-chatbot
|
|
260
|
+
# # docker build -t $REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME:$GITHUB_SHA -f remote-Dockerfile .
|
|
261
|
+
|
|
262
|
+
# # - name: Push Docker image to Artifact Registry
|
|
263
|
+
# # run: |
|
|
264
|
+
# # docker push $REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME:$GITHUB_SHA
|
|
265
|
+
|
|
266
|
+
# - name: Install Helm
|
|
267
|
+
# uses: azure/setup-helm@v4
|
|
268
|
+
# with:
|
|
269
|
+
# version: v3.13.3 # Specify Helm version if needed
|
|
270
|
+
|
|
271
|
+
# - name: Connect to GKE
|
|
272
|
+
# uses: google-github-actions/get-gke-credentials@v2
|
|
273
|
+
# with:
|
|
274
|
+
# cluster_name: ${{ env.CLUSTER }}
|
|
275
|
+
# location: ${{ env.CLUSTER_ZONE }}
|
|
276
|
+
|
|
277
|
+
# - name: Install KEDA (if not already installed)
|
|
278
|
+
# run: |
|
|
279
|
+
# echo "🔍 Checking if KEDA is already installed..."
|
|
280
|
+
|
|
281
|
+
# # Ensure KEDA Helm repository exists and is up-to-date for both install and upgrade paths
|
|
282
|
+
# if ! helm repo list | grep -q '^kedacore\s'; then
|
|
283
|
+
# helm repo add kedacore https://kedacore.github.io/charts
|
|
284
|
+
# else
|
|
285
|
+
# # Force update in case URL changed or local cache is stale
|
|
286
|
+
# helm repo add kedacore https://kedacore.github.io/charts --force-update
|
|
287
|
+
# fi
|
|
288
|
+
# helm repo update
|
|
289
|
+
|
|
290
|
+
# # Install KEDA if needed
|
|
291
|
+
# if ! kubectl get deployment -n keda keda-operator >/dev/null 2>&1; then
|
|
292
|
+
# echo "🚀 Installing KEDA core..."
|
|
293
|
+
|
|
294
|
+
# # Install KEDA core (required before HTTP add-on) with 30s HTTP timeout
|
|
295
|
+
# helm install keda kedacore/keda --namespace keda --create-namespace --wait --timeout=5m \
|
|
296
|
+
# --set operator.extraEnvs[0].name=KEDA_HTTP_DEFAULT_TIMEOUT \
|
|
297
|
+
# --set operator.extraEnvs[0].value="30000"
|
|
298
|
+
|
|
299
|
+
# echo "✅ KEDA core installation completed with 30s HTTP timeout"
|
|
300
|
+
# else
|
|
301
|
+
# echo "✅ KEDA core already installed"
|
|
302
|
+
|
|
303
|
+
# # Update existing KEDA installation to ensure HTTP timeout is set
|
|
304
|
+
# echo "🔄 Updating KEDA configuration to ensure 30s HTTP timeout..."
|
|
305
|
+
# helm upgrade keda kedacore/keda --namespace keda --reuse-values \
|
|
306
|
+
# --set operator.extraEnvs[0].name=KEDA_HTTP_DEFAULT_TIMEOUT \
|
|
307
|
+
# --set operator.extraEnvs[0].value="30000" \
|
|
308
|
+
# --wait --timeout=5m
|
|
309
|
+
|
|
310
|
+
# echo "✅ KEDA configuration updated with 30s HTTP timeout"
|
|
311
|
+
# fi
|
|
312
|
+
|
|
313
|
+
# # Verify KEDA CRDs are available
|
|
314
|
+
# echo "🔍 Verifying KEDA CRDs..."
|
|
315
|
+
# kubectl get crd | grep keda || {
|
|
316
|
+
# echo "❌ KEDA CRDs not found, waiting for them to be ready..."
|
|
317
|
+
# sleep 30
|
|
318
|
+
# kubectl get crd | grep keda || {
|
|
319
|
+
# echo "❌ KEDA CRDs still not available after waiting"
|
|
320
|
+
# exit 1
|
|
321
|
+
# }
|
|
322
|
+
# }
|
|
323
|
+
|
|
324
|
+
# echo "✅ KEDA is ready"
|
|
325
|
+
|
|
326
|
+
# - name: Install jq (for parsing JSON secrets)
|
|
327
|
+
# run: sudo apt-get update && sudo apt-get install -y jq
|
|
328
|
+
|
|
329
|
+
# - name: Create/Update GCP Credentials Secret
|
|
330
|
+
# run: |
|
|
331
|
+
# echo "Creating/Updating Kubernetes secret for GCP credentials..."
|
|
332
|
+
# # Create secret with creds.json key from CREDS_JSON content
|
|
333
|
+
# echo "$CREDS_JSON" | kubectl create secret generic ${{ env.HELM_RELEASE_NAME }}-gcp-creds --from-file=creds.json=/dev/stdin --dry-run=client -o yaml | kubectl apply -f - --overwrite
|
|
334
|
+
# env:
|
|
335
|
+
# CREDS_JSON: ${{ env.CREDS_JSON }}
|
|
336
|
+
|
|
337
|
+
# - name: Create/Update Application Secrets
|
|
338
|
+
# run: |
|
|
339
|
+
# echo "Creating/Updating Kubernetes secret for application environment variables..."
|
|
340
|
+
# # Build the --from-literal arguments dynamically from the JSON object stored in SECRETS_JSON
|
|
341
|
+
# # This creates one key in the secret for each key in the JSON, matching the file structure expected by read_secret
|
|
342
|
+
# LITERAL_ARGS=$(echo "$SECRETS_JSON" | jq -r 'to_entries | .[] | "--from-literal=\(.key)=\(.value)"' | tr '\n' ' ')
|
|
343
|
+
# if [ -z "$LITERAL_ARGS" ]; then
|
|
344
|
+
# echo "SECRETS_JSON is empty or not valid JSON. Skipping secret creation."
|
|
345
|
+
# # Handle error or create empty secret if absolutely required by envFrom (though optional should be fine)
|
|
346
|
+
# # kubectl create secret generic ${{ env.HELM_RELEASE_NAME }}-app-secrets --dry-run=client -o yaml | kubectl apply -f - --overwrite
|
|
347
|
+
# else
|
|
348
|
+
# kubectl create secret generic ${{ env.HELM_RELEASE_NAME }}-app-secrets $LITERAL_ARGS --dry-run=client -o yaml | kubectl apply -f - --overwrite
|
|
349
|
+
# fi
|
|
350
|
+
# env:
|
|
351
|
+
# SECRETS_JSON: ${{ env.SECRETS_JSON }}
|
|
352
|
+
|
|
353
|
+
# # Old code
|
|
354
|
+
# # - name: Deploy to GKE using Helm
|
|
355
|
+
# # run: |
|
|
356
|
+
# # if [ "${{ github.ref }}" == "refs/heads/dv-main" ]; then
|
|
357
|
+
# # VALUES_FILE="values-prod.yaml"
|
|
358
|
+
# # echo "Using production values: $VALUES_FILE"
|
|
359
|
+
# # else
|
|
360
|
+
# # VALUES_FILE="values-stage.yaml"
|
|
361
|
+
# # echo "Using staging values: $VALUES_FILE"
|
|
362
|
+
# # fi
|
|
363
|
+
|
|
364
|
+
# # helm upgrade --install ${{ env.HELM_RELEASE_NAME }} ./k8s/dv-pipecat \
|
|
365
|
+
# # --set image.repository=$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME \
|
|
366
|
+
# # --set image.tag=$GITHUB_SHA \
|
|
367
|
+
# # --namespace default \
|
|
368
|
+
# # -f ./k8s/dv-pipecat/$VALUES_FILE
|
|
369
|
+
# # ---------- DEPLOY ----------
|
|
370
|
+
# # 1) Deploy stage
|
|
371
|
+
# - name: Deploy stage service
|
|
372
|
+
# if: github.ref == 'refs/heads/dv-stage'
|
|
373
|
+
# run: |
|
|
374
|
+
# STAGE_ADMIN_API_KEY=$(echo "$SECRETS_JSON" | jq -r '.ADMIN_API_KEY // empty')
|
|
375
|
+
# if [ -z "$STAGE_ADMIN_API_KEY" ]; then
|
|
376
|
+
# echo "❌ ADMIN_API_KEY not found in SECRETS_JSON"
|
|
377
|
+
# exit 1
|
|
378
|
+
# fi
|
|
379
|
+
# STAGE_CALLING_BACKEND_URL=$(echo "$SECRETS_JSON" | jq -r '.CALLING_BACKEND_URL // empty')
|
|
380
|
+
# if [ -z "$STAGE_CALLING_BACKEND_URL" ]; then
|
|
381
|
+
# echo "❌ CALLING_BACKEND_URL not found in SECRETS_JSON"
|
|
382
|
+
# exit 1
|
|
383
|
+
# fi
|
|
384
|
+
# helm upgrade --install $HELM_RELEASE_NAME ./k8s/dv-pipecat \
|
|
385
|
+
# -f ./k8s/dv-pipecat/values-stage.yaml \
|
|
386
|
+
# --set image.repository=$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME \
|
|
387
|
+
# --set image.tag=$GITHUB_SHA \
|
|
388
|
+
# --set ADMIN_API_KEY="${STAGE_ADMIN_API_KEY}" \
|
|
389
|
+
# --set CALLING_BACKEND_URL="${STAGE_CALLING_BACKEND_URL}" \
|
|
390
|
+
# --namespace default
|
|
391
|
+
|
|
392
|
+
# # 2) **ONLY** when branch is dv-main: deploy/update the CANARY release
|
|
393
|
+
# - name: Deploy canary service
|
|
394
|
+
# if: github.ref == 'refs/heads/dv-main'
|
|
395
|
+
# run: |
|
|
396
|
+
# PROD_ADMIN_API_KEY=$(echo "$SECRETS_JSON" | jq -r '.ADMIN_API_KEY // empty')
|
|
397
|
+
# if [ -z "$PROD_ADMIN_API_KEY" ]; then
|
|
398
|
+
# echo "❌ ADMIN_API_KEY not found in SECRETS_JSON"
|
|
399
|
+
# exit 1
|
|
400
|
+
# fi
|
|
401
|
+
# PROD_CALLING_BACKEND_URL=$(echo "$SECRETS_JSON" | jq -r '.CALLING_BACKEND_URL // empty')
|
|
402
|
+
# if [ -z "$PROD_CALLING_BACKEND_URL" ]; then
|
|
403
|
+
# echo "❌ CALLING_BACKEND_URL not found in SECRETS_JSON"
|
|
404
|
+
# exit 1
|
|
405
|
+
# fi
|
|
406
|
+
# echo "🚀 Deploying canary service..."
|
|
407
|
+
# helm upgrade --install ${HELM_RELEASE_NAME}-canary ./k8s/dv-pipecat \
|
|
408
|
+
# -f ./k8s/dv-pipecat/values-prod.yaml \
|
|
409
|
+
# -f ./k8s/dv-pipecat/values-canary.yaml \
|
|
410
|
+
# --set image.repository=$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME \
|
|
411
|
+
# --set image.tag=$GITHUB_SHA \
|
|
412
|
+
# --set ADMIN_API_KEY="${PROD_ADMIN_API_KEY}" \
|
|
413
|
+
# --set CALLING_BACKEND_URL="${PROD_CALLING_BACKEND_URL}" \
|
|
414
|
+
# --namespace default
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dv-pipecat-ai
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.85.dev1
|
|
4
4
|
Summary: An open source framework for voice (and multimodal) assistants
|
|
5
5
|
License-Expression: BSD-2-Clause
|
|
6
6
|
Project-URL: Source, https://github.com/pipecat-ai/pipecat
|
|
@@ -134,6 +134,7 @@ Requires-Dist: fastapi<0.117.0,>=0.115.6; extra == "runner"
|
|
|
134
134
|
Requires-Dist: pipecat-ai-small-webrtc-prebuilt>=1.0.0; extra == "runner"
|
|
135
135
|
Provides-Extra: sambanova
|
|
136
136
|
Provides-Extra: sarvam
|
|
137
|
+
Requires-Dist: sarvamai<1,>=0.1.19; extra == "sarvam"
|
|
137
138
|
Requires-Dist: websockets<15.0,>=13.1; extra == "sarvam"
|
|
138
139
|
Provides-Extra: sentry
|
|
139
140
|
Requires-Dist: sentry-sdk~=2.23.1; extra == "sentry"
|
|
@@ -92,7 +92,7 @@ rime = [ "websockets>=13.1,<15.0" ]
|
|
|
92
92
|
riva = [ "nvidia-riva-client~=2.21.1" ]
|
|
93
93
|
runner = [ "python-dotenv>=1.0.0,<2.0.0", "uvicorn>=0.32.0,<1.0.0", "fastapi>=0.115.6,<0.117.0", "pipecat-ai-small-webrtc-prebuilt>=1.0.0"]
|
|
94
94
|
sambanova = []
|
|
95
|
-
sarvam = [ "websockets>=13.1,<15.0" ]
|
|
95
|
+
sarvam = [ "sarvamai>=0.1.19,<1", "websockets>=13.1,<15.0" ]
|
|
96
96
|
sentry = [ "sentry-sdk~=2.23.1" ]
|
|
97
97
|
local-smart-turn = [ "coremltools>=8.0", "transformers", "torch>=2.5.0,<3", "torchaudio>=2.5.0,<3" ]
|
|
98
98
|
remote-smart-turn = []
|
{dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/dv_pipecat_ai.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dv-pipecat-ai
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.85.dev1
|
|
4
4
|
Summary: An open source framework for voice (and multimodal) assistants
|
|
5
5
|
License-Expression: BSD-2-Clause
|
|
6
6
|
Project-URL: Source, https://github.com/pipecat-ai/pipecat
|
|
@@ -134,6 +134,7 @@ Requires-Dist: fastapi<0.117.0,>=0.115.6; extra == "runner"
|
|
|
134
134
|
Requires-Dist: pipecat-ai-small-webrtc-prebuilt>=1.0.0; extra == "runner"
|
|
135
135
|
Provides-Extra: sambanova
|
|
136
136
|
Provides-Extra: sarvam
|
|
137
|
+
Requires-Dist: sarvamai<1,>=0.1.19; extra == "sarvam"
|
|
137
138
|
Requires-Dist: websockets<15.0,>=13.1; extra == "sarvam"
|
|
138
139
|
Provides-Extra: sentry
|
|
139
140
|
Requires-Dist: sentry-sdk~=2.23.1; extra == "sentry"
|
{dv_pipecat_ai-0.0.82.dev881 → dv_pipecat_ai-0.0.85.dev1}/src/dv_pipecat_ai.egg-info/SOURCES.txt
RENAMED
|
@@ -49,7 +49,6 @@ uv.lock
|
|
|
49
49
|
.github/workflows/publish_test.yaml
|
|
50
50
|
.github/workflows/python-compatibility.yaml
|
|
51
51
|
.github/workflows/set-traffic-split.yml
|
|
52
|
-
.github/workflows/smart-auto-release.yml
|
|
53
52
|
.github/workflows/sync-quickstart.yaml
|
|
54
53
|
.github/workflows/tests.yaml
|
|
55
54
|
create-new-machine/ansible.cfg
|
|
@@ -144,6 +143,7 @@ src/pipecat/audio/vad/silero.py
|
|
|
144
143
|
src/pipecat/audio/vad/vad_analyzer.py
|
|
145
144
|
src/pipecat/audio/vad/data/__init__.py
|
|
146
145
|
src/pipecat/audio/vad/data/silero_vad.onnx
|
|
146
|
+
src/pipecat/audio/vad/data/silero_vad_v2.onnx
|
|
147
147
|
src/pipecat/clocks/__init__.py
|
|
148
148
|
src/pipecat/clocks/base_clock.py
|
|
149
149
|
src/pipecat/clocks/system_clock.py
|
|
@@ -177,6 +177,7 @@ src/pipecat/pipeline/service_switcher.py
|
|
|
177
177
|
src/pipecat/pipeline/sync_parallel_pipeline.py
|
|
178
178
|
src/pipecat/pipeline/task.py
|
|
179
179
|
src/pipecat/pipeline/task_observer.py
|
|
180
|
+
src/pipecat/pipeline/tts_switcher.py
|
|
180
181
|
src/pipecat/pipeline/to_be_updated/merge_pipeline.py
|
|
181
182
|
src/pipecat/processors/__init__.py
|
|
182
183
|
src/pipecat/processors/async_generator.py
|
|
@@ -229,8 +230,8 @@ src/pipecat/serializers/__init__.py
|
|
|
229
230
|
src/pipecat/serializers/asterisk.py
|
|
230
231
|
src/pipecat/serializers/base_serializer.py
|
|
231
232
|
src/pipecat/serializers/convox.py
|
|
233
|
+
src/pipecat/serializers/custom.py
|
|
232
234
|
src/pipecat/serializers/exotel.py
|
|
233
|
-
src/pipecat/serializers/genesys.py
|
|
234
235
|
src/pipecat/serializers/livekit.py
|
|
235
236
|
src/pipecat/serializers/plivo.py
|
|
236
237
|
src/pipecat/serializers/protobuf.py
|
|
@@ -305,7 +306,6 @@ src/pipecat/services/google/llm_openai.py
|
|
|
305
306
|
src/pipecat/services/google/llm_vertex.py
|
|
306
307
|
src/pipecat/services/google/rtvi.py
|
|
307
308
|
src/pipecat/services/google/stt.py
|
|
308
|
-
src/pipecat/services/google/test-google-chirp.py
|
|
309
309
|
src/pipecat/services/google/tts.py
|
|
310
310
|
src/pipecat/services/grok/__init__.py
|
|
311
311
|
src/pipecat/services/grok/llm.py
|
|
@@ -370,6 +370,7 @@ src/pipecat/services/sambanova/__init__.py
|
|
|
370
370
|
src/pipecat/services/sambanova/llm.py
|
|
371
371
|
src/pipecat/services/sambanova/stt.py
|
|
372
372
|
src/pipecat/services/sarvam/__init__.py
|
|
373
|
+
src/pipecat/services/sarvam/stt.py
|
|
373
374
|
src/pipecat/services/sarvam/tts.py
|
|
374
375
|
src/pipecat/services/simli/__init__.py
|
|
375
376
|
src/pipecat/services/simli/video.py
|
|
Binary file
|
|
@@ -135,7 +135,13 @@ class SileroVADAnalyzer(VADAnalyzer):
|
|
|
135
135
|
with automatic model state management and periodic resets.
|
|
136
136
|
"""
|
|
137
137
|
|
|
138
|
-
def __init__(
|
|
138
|
+
def __init__(
|
|
139
|
+
self,
|
|
140
|
+
*,
|
|
141
|
+
sample_rate: Optional[int] = None,
|
|
142
|
+
params: Optional[VADParams] = None,
|
|
143
|
+
model_name: Optional[str] = None,
|
|
144
|
+
):
|
|
139
145
|
"""Initialize the Silero VAD analyzer.
|
|
140
146
|
|
|
141
147
|
Args:
|
|
@@ -146,7 +152,7 @@ class SileroVADAnalyzer(VADAnalyzer):
|
|
|
146
152
|
|
|
147
153
|
logger.debug("Loading Silero VAD model...")
|
|
148
154
|
|
|
149
|
-
model_name = "silero_vad.onnx"
|
|
155
|
+
model_name = model_name or "silero_vad.onnx"
|
|
150
156
|
package_path = "pipecat.audio.vad.data"
|
|
151
157
|
|
|
152
158
|
try:
|
|
@@ -166,7 +172,7 @@ class SileroVADAnalyzer(VADAnalyzer):
|
|
|
166
172
|
|
|
167
173
|
self._last_reset_time = 0
|
|
168
174
|
|
|
169
|
-
logger.debug("Loaded Silero VAD")
|
|
175
|
+
logger.debug(f"Loaded Silero VAD {model_file_path}")
|
|
170
176
|
|
|
171
177
|
#
|
|
172
178
|
# VADAnalyzer
|
|
@@ -1306,6 +1306,20 @@ class SpeechControlParamsFrame(SystemFrame):
|
|
|
1306
1306
|
turn_params: Optional[SmartTurnParams] = None
|
|
1307
1307
|
|
|
1308
1308
|
|
|
1309
|
+
@dataclass
|
|
1310
|
+
class StartDTMFCaptureFrame(SystemFrame):
|
|
1311
|
+
"""System frame indicating the bot is actively collecting DTMF input."""
|
|
1312
|
+
|
|
1313
|
+
pass
|
|
1314
|
+
|
|
1315
|
+
|
|
1316
|
+
@dataclass
|
|
1317
|
+
class EndDTMFCaptureFrame(SystemFrame):
|
|
1318
|
+
"""System frame indicating DTMF collection has finished."""
|
|
1319
|
+
|
|
1320
|
+
pass
|
|
1321
|
+
|
|
1322
|
+
|
|
1309
1323
|
#
|
|
1310
1324
|
# Control frames
|
|
1311
1325
|
#
|
|
@@ -1473,6 +1487,17 @@ class STTUpdateSettingsFrame(ServiceUpdateSettingsFrame):
|
|
|
1473
1487
|
pass
|
|
1474
1488
|
|
|
1475
1489
|
|
|
1490
|
+
@dataclass
|
|
1491
|
+
class DTMFUpdateSettingsFrame(ServiceUpdateSettingsFrame):
|
|
1492
|
+
"""Frame for updating DTMF aggregator settings.
|
|
1493
|
+
|
|
1494
|
+
Updates DTMF configuration dynamically during conversation flow.
|
|
1495
|
+
Settings can include: timeout, digits, end, reset parameters.
|
|
1496
|
+
"""
|
|
1497
|
+
|
|
1498
|
+
pass
|
|
1499
|
+
|
|
1500
|
+
|
|
1476
1501
|
@dataclass
|
|
1477
1502
|
class VADParamsUpdateFrame(SystemFrame):
|
|
1478
1503
|
"""Frame for updating VAD parameters.
|
|
@@ -1564,6 +1589,19 @@ class StopUserIdleProcessorFrame(SystemFrame):
|
|
|
1564
1589
|
pass
|
|
1565
1590
|
|
|
1566
1591
|
|
|
1592
|
+
@dataclass
|
|
1593
|
+
class ResetUserIdleProcessorFrame(SystemFrame):
|
|
1594
|
+
"""Frame signalling the UserIdleProcessor to treat the user as active again.
|
|
1595
|
+
|
|
1596
|
+
Parameters:
|
|
1597
|
+
text: Optional transcription text that triggered the reset.
|
|
1598
|
+
is_final: Whether the transcription was marked final by STT.
|
|
1599
|
+
"""
|
|
1600
|
+
|
|
1601
|
+
text: str = ""
|
|
1602
|
+
is_final: bool = False
|
|
1603
|
+
|
|
1604
|
+
|
|
1567
1605
|
@dataclass
|
|
1568
1606
|
class WaitForDTMFFrame(ControlFrame):
|
|
1569
1607
|
"""Frame to stop the UserIdleProcessor monitoring."""
|
|
@@ -1571,6 +1609,17 @@ class WaitForDTMFFrame(ControlFrame):
|
|
|
1571
1609
|
pass
|
|
1572
1610
|
|
|
1573
1611
|
|
|
1612
|
+
@dataclass
|
|
1613
|
+
class CallTransferFrame(ControlFrame):
|
|
1614
|
+
"""Frame to request call transfer to another number/destination.
|
|
1615
|
+
|
|
1616
|
+
Parameters:
|
|
1617
|
+
target: The phone number or destination to transfer the call to.
|
|
1618
|
+
"""
|
|
1619
|
+
|
|
1620
|
+
target: str
|
|
1621
|
+
|
|
1622
|
+
|
|
1574
1623
|
@dataclass
|
|
1575
1624
|
class ManuallySwitchServiceFrame(ServiceSwitcherFrame):
|
|
1576
1625
|
"""A frame to request a manual switch in the active service in a ServiceSwitcher.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2025, Daily
|
|
3
|
+
#
|
|
4
|
+
# SPDX-License-Identifier: BSD 2-Clause License
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
"""TTS switcher for switching between different TTS services at runtime, with different switching strategies."""
|
|
8
|
+
|
|
9
|
+
from typing import List, Optional, Type
|
|
10
|
+
|
|
11
|
+
from pipecat.pipeline.service_switcher import ServiceSwitcher, StrategyType
|
|
12
|
+
from pipecat.services.tts_service import TTSService
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class TTSSwitcher(ServiceSwitcher[StrategyType]):
|
|
16
|
+
"""A pipeline that switches between different TTS services at runtime."""
|
|
17
|
+
|
|
18
|
+
def __init__(self, tts_services: List[TTSService], strategy_type: Type[StrategyType]):
|
|
19
|
+
"""Initialize the TTS switcher with a list of TTS services and a switching strategy."""
|
|
20
|
+
super().__init__(tts_services, strategy_type)
|
|
21
|
+
|
|
22
|
+
@property
|
|
23
|
+
def tts_services(self) -> List[TTSService]:
|
|
24
|
+
"""Get the list of TTS services managed by this switcher."""
|
|
25
|
+
return self.services
|
|
26
|
+
|
|
27
|
+
@property
|
|
28
|
+
def active_tts(self) -> Optional[TTSService]:
|
|
29
|
+
"""Get the currently active TTS service, if any."""
|
|
30
|
+
return self.strategy.active_service
|