dv-pipecat-ai 0.0.82.dev43__tar.gz → 0.0.82.dev49__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.82.dev49/.github/workflows/github.yml +414 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/PKG-INFO +1 -1
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/dv_pipecat_ai.egg-info/PKG-INFO +1 -1
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/dv_pipecat_ai.egg-info/SOURCES.txt +1 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/frames/frames.py +11 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/dtmf_aggregator.py +22 -29
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/dtmf_aggregator.py +60 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/__init__.py +3 -1
- dv_pipecat_ai-0.0.82.dev49/src/pipecat/serializers/custom.py +245 -0
- dv_pipecat_ai-0.0.82.dev43/.github/workflows/github.yml +0 -511
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.dockerignore +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/build.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/coverage.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/format.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/promote-prod.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/publish.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/publish_test.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/python-compatibility.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/set-traffic-split.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/sync-quickstart.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/tests.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.gitignore +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.pre-commit-config.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.readthedocs.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/CHANGELOG.md +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/CHANGELOG.md.template +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/CLAUDE.md +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/CONTRIBUTING.md +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/DOCKER_BUILD_OPTIMIZATION_SUMMARY.md +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/LICENSE +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/MANIFEST.in +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/README.md +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/ansible.cfg +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/ansible_deployment.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/cleanup_old_containers.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/codecov.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/create-new-machine/ansible.cfg +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/create-new-machine/ansible_setup.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/create-new-machine/inventory.ini +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/create-new-machine/replace_env.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/create-new-machine/setup_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/create_inventory.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/delete_old_dockers.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/deploy.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/deploy_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/docker-compose.dev.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/dump_logs.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/env.example +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/fetch_logs.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/inventory.ini +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/.helmignore +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/Chart.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/cluster-role.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/keda-api-key-secret.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/keda-scaledobject.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/keda-trigger-auth.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/pdb.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/service.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/values-canary.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/values-prod.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/values-stage.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/values.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/istio/destination-virtualservice.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/merge-code-into-single-file.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/pipecat.png +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/pyproject.toml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/restart.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/restart_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/setup.cfg +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/dv_pipecat_ai.egg-info/requires.txt +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/base_llm_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/schemas/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/schemas/direct_function.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/schemas/function_schema.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-0.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-1.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-2.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-3.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-4.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-5.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-6.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-7.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-8.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-9.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-pound.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-star.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/types.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/filters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/filters/aic_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/filters/koala_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/filters/krisp_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/filters/pyrnn_local_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/interruptions/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/mixers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/resamplers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/resamplers/soxr_stream_resampler.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v2.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/vad/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/vad/data/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/vad/data/silero_vad_v2.onnx +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/vad/silero.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/clocks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/clocks/base_clock.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/clocks/system_clock.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/extensions/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/extensions/ivr/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/extensions/ivr/ivr_navigator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/extensions/voicemail/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/extensions/voicemail/voicemail_detector.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/frames/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/frames/frames.proto +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/metrics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/metrics/metrics.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/base_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/loggers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/turn_tracking_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/base_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/base_task.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/llm_switcher.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/pipeline.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/runner.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/service_switcher.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/task.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/task_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/gated.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/gated_openai_llm_context.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/llm_context.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/llm_response.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/llm_response_universal.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/sentence.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/user_response.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/async_generator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/audio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/consumer_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/frame_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/function_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/identity_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/null_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/frame_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/frameworks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/frameworks/langchain.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/frameworks/rtvi.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/gstreamer/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/idle_frame_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/logger.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/metrics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/metrics/frame_processor_metrics.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/metrics/sentry.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/producer_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/text_transformer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/transcript_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/user_idle_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/py.typed +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/runner/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/runner/daily.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/runner/livekit.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/runner/run.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/runner/types.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/runner/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/asterisk.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/base_serializer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/convox.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/exotel.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/livekit.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/plivo.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/protobuf.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/telnyx.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/twilio.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/ai_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/ai_services.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/anthropic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/anthropic/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/assemblyai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/assemblyai/models.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/assemblyai/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/asyncai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/asyncai/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws_nova_sonic/ready.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/azure/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/azure/common.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/azure/image.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/azure/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/azure/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/azure/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/cartesia/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/cartesia/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/cartesia/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/cerebras/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/cerebras/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/deepgram/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/deepgram/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/deepgram/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/deepseek/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/deepseek/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/elevenlabs/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/elevenlabs/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/elevenlabs/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/fal/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/fal/image.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/fal/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/fireworks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/fireworks/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/fish/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/fish/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/gemini_multimodal_live/file_api.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/gladia/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/gladia/config.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/gladia/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/frames.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/google.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/image.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/llm_openai.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/llm_vertex.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/rtvi.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/grok/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/grok/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/groq/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/groq/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/groq/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/groq/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/hamsa/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/hamsa/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/heygen/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/heygen/api.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/heygen/client.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/heygen/video.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/image_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/inworld/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/inworld/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/llm_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/lmnt/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/lmnt/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/mcp_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/mem0/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/mem0/memory.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/minimax/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/minimax/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/mistral/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/mistral/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/moondream/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/moondream/vision.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/neuphonic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/neuphonic/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/nim/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/nim/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/ollama/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/ollama/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai/base_llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai/image.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openpipe/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openpipe/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openrouter/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openrouter/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/perplexity/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/perplexity/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/piper/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/piper/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/playht/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/playht/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/qwen/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/qwen/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/rime/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/rime/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/riva/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/riva/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/riva/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/sambanova/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/sambanova/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/sambanova/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/sarvam/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/sarvam/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/simli/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/simli/video.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/soniox/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/soniox/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/speechmatics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/speechmatics/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/stt_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/tavus/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/tavus/video.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/together/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/together/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/tts_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/ultravox/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/ultravox/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/vision_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/vistaar/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/vistaar/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/websocket_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/whisper/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/whisper/base_stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/whisper/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/xtts/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/xtts/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/sync/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/sync/base_notifier.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/sync/event_notifier.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/tests/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/tests/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transcriptions/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transcriptions/language.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/base_input.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/base_output.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/base_transport.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/daily/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/daily/transport.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/daily/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/livekit/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/livekit/transport.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/local/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/local/audio.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/local/tk.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/network/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/network/fastapi_websocket.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/network/small_webrtc.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/network/webrtc_connection.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/network/websocket_client.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/network/websocket_server.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/services/daily.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/services/helpers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/services/livekit.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/services/tavus.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/smallwebrtc/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/smallwebrtc/connection.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/smallwebrtc/transport.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/tavus/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/tavus/transport.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/websocket/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/websocket/client.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/websocket/fastapi.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/websocket/server.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/whatsapp/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/whatsapp/api.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/whatsapp/client.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/asyncio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/asyncio/task_manager.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/base_object.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/logger_config.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/network.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/string.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/text/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/text/base_text_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/time.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/class_decorators.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/service_attributes.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/service_decorators.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/setup.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/stop_container.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/test_elevenlabs_stt_segmented.py +0 -0
- {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/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
|
{dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/dv_pipecat_ai.egg-info/SOURCES.txt
RENAMED
|
@@ -229,6 +229,7 @@ src/pipecat/serializers/__init__.py
|
|
|
229
229
|
src/pipecat/serializers/asterisk.py
|
|
230
230
|
src/pipecat/serializers/base_serializer.py
|
|
231
231
|
src/pipecat/serializers/convox.py
|
|
232
|
+
src/pipecat/serializers/custom.py
|
|
232
233
|
src/pipecat/serializers/exotel.py
|
|
233
234
|
src/pipecat/serializers/livekit.py
|
|
234
235
|
src/pipecat/serializers/plivo.py
|
|
@@ -1473,6 +1473,17 @@ class STTUpdateSettingsFrame(ServiceUpdateSettingsFrame):
|
|
|
1473
1473
|
pass
|
|
1474
1474
|
|
|
1475
1475
|
|
|
1476
|
+
@dataclass
|
|
1477
|
+
class DTMFUpdateSettingsFrame(ServiceUpdateSettingsFrame):
|
|
1478
|
+
"""Frame for updating DTMF aggregator settings.
|
|
1479
|
+
|
|
1480
|
+
Updates DTMF configuration dynamically during conversation flow.
|
|
1481
|
+
Settings can include: timeout, digits, end, reset parameters.
|
|
1482
|
+
"""
|
|
1483
|
+
|
|
1484
|
+
pass
|
|
1485
|
+
|
|
1486
|
+
|
|
1476
1487
|
@dataclass
|
|
1477
1488
|
class VADParamsUpdateFrame(SystemFrame):
|
|
1478
1489
|
"""Frame for updating VAD parameters.
|
|
@@ -4,13 +4,6 @@
|
|
|
4
4
|
# SPDX-License-Identifier: BSD 2-Clause License
|
|
5
5
|
#
|
|
6
6
|
|
|
7
|
-
"""DTMF aggregation processor for converting keypad input to transcription.
|
|
8
|
-
|
|
9
|
-
This module provides a frame processor that aggregates DTMF (Dual-Tone Multi-Frequency)
|
|
10
|
-
keypad inputs into meaningful sequences and converts them to transcription frames
|
|
11
|
-
for downstream processing by LLM context aggregators.
|
|
12
|
-
"""
|
|
13
|
-
|
|
14
7
|
import asyncio
|
|
15
8
|
from typing import Optional
|
|
16
9
|
|
|
@@ -24,7 +17,7 @@ from pipecat.frames.frames import (
|
|
|
24
17
|
StartFrame,
|
|
25
18
|
TranscriptionFrame,
|
|
26
19
|
)
|
|
27
|
-
from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
|
|
20
|
+
from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
|
|
28
21
|
from pipecat.utils.time import time_now_iso8601
|
|
29
22
|
|
|
30
23
|
|
|
@@ -33,12 +26,16 @@ class DTMFAggregator(FrameProcessor):
|
|
|
33
26
|
|
|
34
27
|
The aggregator accumulates digits from InputDTMFFrame instances and flushes
|
|
35
28
|
when:
|
|
36
|
-
|
|
37
29
|
- Timeout occurs (configurable idle period)
|
|
38
30
|
- Termination digit is received (default: '#')
|
|
39
31
|
- EndFrame or CancelFrame is received
|
|
40
32
|
|
|
41
33
|
Emits TranscriptionFrame for compatibility with existing LLM context aggregators.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
timeout: Idle timeout in seconds before flushing
|
|
37
|
+
termination_digit: Digit that triggers immediate flush
|
|
38
|
+
prefix: Prefix added to DTMF sequence in transcription
|
|
42
39
|
"""
|
|
43
40
|
|
|
44
41
|
def __init__(
|
|
@@ -48,14 +45,6 @@ class DTMFAggregator(FrameProcessor):
|
|
|
48
45
|
prefix: str = "DTMF: ",
|
|
49
46
|
**kwargs,
|
|
50
47
|
):
|
|
51
|
-
"""Initialize the DTMF aggregator.
|
|
52
|
-
|
|
53
|
-
Args:
|
|
54
|
-
timeout: Idle timeout in seconds before flushing
|
|
55
|
-
termination_digit: Digit that triggers immediate flush
|
|
56
|
-
prefix: Prefix added to DTMF sequence in transcription
|
|
57
|
-
**kwargs: Additional arguments passed to FrameProcessor
|
|
58
|
-
"""
|
|
59
48
|
super().__init__(**kwargs)
|
|
60
49
|
self._aggregation = ""
|
|
61
50
|
self._idle_timeout = timeout
|
|
@@ -65,18 +54,7 @@ class DTMFAggregator(FrameProcessor):
|
|
|
65
54
|
self._digit_event = asyncio.Event()
|
|
66
55
|
self._aggregation_task: Optional[asyncio.Task] = None
|
|
67
56
|
|
|
68
|
-
async def cleanup(self) -> None:
|
|
69
|
-
"""Clean up resources."""
|
|
70
|
-
await super().cleanup()
|
|
71
|
-
await self._stop_aggregation_task()
|
|
72
|
-
|
|
73
57
|
async def process_frame(self, frame: Frame, direction: FrameDirection) -> None:
|
|
74
|
-
"""Process incoming frames and handle DTMF aggregation.
|
|
75
|
-
|
|
76
|
-
Args:
|
|
77
|
-
frame: The frame to process.
|
|
78
|
-
direction: The direction of frame flow in the pipeline.
|
|
79
|
-
"""
|
|
80
58
|
await super().process_frame(frame, direction)
|
|
81
59
|
|
|
82
60
|
if isinstance(frame, StartFrame):
|
|
@@ -105,7 +83,7 @@ class DTMFAggregator(FrameProcessor):
|
|
|
105
83
|
|
|
106
84
|
# For first digit, schedule interruption.
|
|
107
85
|
if is_first_digit:
|
|
108
|
-
|
|
86
|
+
asyncio.create_task(self._send_interruption_task())
|
|
109
87
|
|
|
110
88
|
# Check for immediate flush conditions
|
|
111
89
|
if frame.button == self._termination_digit:
|
|
@@ -114,6 +92,15 @@ class DTMFAggregator(FrameProcessor):
|
|
|
114
92
|
# Signal digit received for timeout handling
|
|
115
93
|
self._digit_event.set()
|
|
116
94
|
|
|
95
|
+
async def _send_interruption_task(self):
|
|
96
|
+
"""Send interruption frame safely in a separate task."""
|
|
97
|
+
try:
|
|
98
|
+
# Send the interruption frame
|
|
99
|
+
await self.push_frame(BotInterruptionFrame(), FrameDirection.UPSTREAM)
|
|
100
|
+
except Exception as e:
|
|
101
|
+
# Log error but don't propagate
|
|
102
|
+
print(f"Error sending interruption: {e}")
|
|
103
|
+
|
|
117
104
|
def _create_aggregation_task(self) -> None:
|
|
118
105
|
"""Creates the aggregation task if it hasn't been created yet."""
|
|
119
106
|
if not self._aggregation_task:
|
|
@@ -132,6 +119,7 @@ class DTMFAggregator(FrameProcessor):
|
|
|
132
119
|
await asyncio.wait_for(self._digit_event.wait(), timeout=self._idle_timeout)
|
|
133
120
|
self._digit_event.clear()
|
|
134
121
|
except asyncio.TimeoutError:
|
|
122
|
+
self.reset_watchdog()
|
|
135
123
|
if self._aggregation:
|
|
136
124
|
await self._flush_aggregation()
|
|
137
125
|
|
|
@@ -149,3 +137,8 @@ class DTMFAggregator(FrameProcessor):
|
|
|
149
137
|
await self.push_frame(transcription_frame)
|
|
150
138
|
|
|
151
139
|
self._aggregation = ""
|
|
140
|
+
|
|
141
|
+
async def cleanup(self) -> None:
|
|
142
|
+
"""Clean up resources."""
|
|
143
|
+
await super().cleanup()
|
|
144
|
+
await self._stop_aggregation_task()
|
{dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/dtmf_aggregator.py
RENAMED
|
@@ -3,6 +3,7 @@ import asyncio
|
|
|
3
3
|
from pipecat.frames.frames import (
|
|
4
4
|
BotSpeakingFrame,
|
|
5
5
|
CancelFrame,
|
|
6
|
+
DTMFUpdateSettingsFrame,
|
|
6
7
|
EndFrame,
|
|
7
8
|
Frame,
|
|
8
9
|
InputDTMFFrame,
|
|
@@ -105,6 +106,65 @@ class DTMFAggregator(FrameProcessor):
|
|
|
105
106
|
elif isinstance(frame, BotSpeakingFrame):
|
|
106
107
|
if self._digit_aggregate_task is not None:
|
|
107
108
|
self._digit_event.set()
|
|
109
|
+
elif isinstance(frame, DTMFUpdateSettingsFrame):
|
|
110
|
+
await self._update_settings(frame.settings)
|
|
111
|
+
# Don't pass the settings frame downstream
|
|
112
|
+
|
|
113
|
+
async def _update_settings(self, settings: dict) -> None:
|
|
114
|
+
"""Update DTMF aggregator settings dynamically.
|
|
115
|
+
|
|
116
|
+
Args:
|
|
117
|
+
settings: Dictionary containing new DTMF settings
|
|
118
|
+
Supported keys: timeout, digits, end, reset
|
|
119
|
+
"""
|
|
120
|
+
settings_changed = False
|
|
121
|
+
|
|
122
|
+
if "timeout" in settings and settings["timeout"] is not None:
|
|
123
|
+
new_timeout = float(settings["timeout"])
|
|
124
|
+
if new_timeout != self._idle_timeout:
|
|
125
|
+
self.logger.debug(f"Updating DTMF timeout from {self._idle_timeout} to {new_timeout}")
|
|
126
|
+
self._idle_timeout = new_timeout
|
|
127
|
+
settings_changed = True
|
|
128
|
+
|
|
129
|
+
if "digits" in settings:
|
|
130
|
+
new_digits = settings["digits"]
|
|
131
|
+
if new_digits != self._digits:
|
|
132
|
+
self.logger.debug(f"Updating DTMF digits from {self._digits} to {new_digits}")
|
|
133
|
+
self._digits = new_digits
|
|
134
|
+
settings_changed = True
|
|
135
|
+
|
|
136
|
+
if "end" in settings:
|
|
137
|
+
# Convert single string to set if needed
|
|
138
|
+
end_value = settings["end"]
|
|
139
|
+
if end_value is None:
|
|
140
|
+
new_end_on = set()
|
|
141
|
+
elif isinstance(end_value, str):
|
|
142
|
+
new_end_on = {end_value} if end_value else set()
|
|
143
|
+
else:
|
|
144
|
+
new_end_on = set(end_value)
|
|
145
|
+
|
|
146
|
+
if new_end_on != self._end_on:
|
|
147
|
+
self.logger.debug(f"Updating DTMF end_on from {self._end_on} to {new_end_on}")
|
|
148
|
+
self._end_on = new_end_on
|
|
149
|
+
settings_changed = True
|
|
150
|
+
|
|
151
|
+
if "reset" in settings:
|
|
152
|
+
# Convert single string to set if needed
|
|
153
|
+
reset_value = settings["reset"]
|
|
154
|
+
if reset_value is None:
|
|
155
|
+
new_reset_on = set()
|
|
156
|
+
elif isinstance(reset_value, str):
|
|
157
|
+
new_reset_on = {reset_value} if reset_value else set()
|
|
158
|
+
else:
|
|
159
|
+
new_reset_on = set(reset_value)
|
|
160
|
+
|
|
161
|
+
if new_reset_on != self._reset_on:
|
|
162
|
+
self.logger.debug(f"Updating DTMF reset_on from {self._reset_on} to {new_reset_on}")
|
|
163
|
+
self._reset_on = new_reset_on
|
|
164
|
+
settings_changed = True
|
|
165
|
+
|
|
166
|
+
if settings_changed:
|
|
167
|
+
self.logger.info(f"DTMF settings updated successfully")
|
|
108
168
|
|
|
109
169
|
async def _digit_agg_handler(self, direction: FrameDirection, raise_timeout=False):
|
|
110
170
|
"""Idle task that waits for new DTMF activity. If no new digit is received within
|
{dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/__init__.py
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from .base_serializer import FrameSerializer, FrameSerializerType
|
|
2
2
|
from .convox import ConVoxFrameSerializer
|
|
3
|
+
from .custom import CustomFrameSerializer
|
|
3
4
|
from .exotel import ExotelFrameSerializer
|
|
4
5
|
from .plivo import PlivoFrameSerializer
|
|
5
6
|
from .telnyx import TelnyxFrameSerializer
|
|
@@ -7,8 +8,9 @@ from .twilio import TwilioFrameSerializer
|
|
|
7
8
|
|
|
8
9
|
__all__ = [
|
|
9
10
|
"FrameSerializer",
|
|
10
|
-
"FrameSerializerType",
|
|
11
|
+
"FrameSerializerType",
|
|
11
12
|
"ConVoxFrameSerializer",
|
|
13
|
+
"CustomFrameSerializer",
|
|
12
14
|
"ExotelFrameSerializer",
|
|
13
15
|
"PlivoFrameSerializer",
|
|
14
16
|
"TelnyxFrameSerializer",
|