dv-pipecat-ai 0.0.85.dev856__tar.gz → 0.0.85.dev858__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.dev856 → dv_pipecat_ai-0.0.85.dev858}/CLAUDE.md +64 -1
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/PKG-INFO +1 -1
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/dv_pipecat_ai.egg-info/PKG-INFO +1 -1
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/dv_pipecat_ai.egg-info/SOURCES.txt +1 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v3.py +5 -1
- dv_pipecat_ai-0.0.85.dev858/src/pipecat/metrics/connection_metrics.py +45 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/frame_processor.py +44 -1
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/metrics/frame_processor_metrics.py +108 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/deepgram/stt.py +10 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/elevenlabs/tts.py +6 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/google/llm.py +26 -11
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai/base_llm.py +21 -12
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/vistaar/llm.py +6 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.dockerignore +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/build.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/coverage.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/force_push_to_pypi.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/format.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/github.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/promote-prod.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/publish.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/publish_test.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/python-compatibility.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/set-traffic-split.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/sync-quickstart.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/tests.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.gitignore +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.pre-commit-config.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.readthedocs.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/CHANGELOG.md +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/CHANGELOG.md.template +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/COMMUNITY_INTEGRATIONS.md +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/CONTRIBUTING.md +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/DOCKER_BUILD_OPTIMIZATION_SUMMARY.md +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/LICENSE +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/MANIFEST.in +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/README.md +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/SECURITY.md +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/ansible.cfg +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/ansible_deployment.sh +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/cleanup_old_containers.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/codecov.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/create-new-machine/ansible.cfg +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/create-new-machine/ansible_setup.sh +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/create-new-machine/inventory.ini +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/create-new-machine/replace_env.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/create-new-machine/setup_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/create_inventory.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/delete_old_dockers.sh +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/deploy.sh +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/deploy_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/docker-compose.dev.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/dump_logs.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/env.example +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/fetch_logs.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/inventory.ini +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/.helmignore +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/Chart.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/templates/cluster-role.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/templates/keda-api-key-secret.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/templates/keda-scaledobject.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/templates/keda-trigger-auth.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/templates/pdb.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/templates/service.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/values-canary.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/values-prod.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/values-stage.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/dv-pipecat/values.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/k8s/istio/destination-virtualservice.yaml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/merge-code-into-single-file.sh +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/pipecat.png +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/pyproject.toml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/restart.sh +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/restart_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/setup.cfg +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/dv_pipecat_ai.egg-info/requires.txt +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/adapters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/adapters/base_llm_adapter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/adapters/schemas/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/adapters/schemas/direct_function.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/adapters/schemas/function_schema.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/adapters/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/dtmf/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/dtmf/dtmf-0.wav +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/dtmf/dtmf-1.wav +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/dtmf/dtmf-2.wav +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/dtmf/dtmf-3.wav +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/dtmf/dtmf-4.wav +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/dtmf/dtmf-5.wav +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/dtmf/dtmf-6.wav +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/dtmf/dtmf-7.wav +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/dtmf/dtmf-8.wav +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/dtmf/dtmf-9.wav +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/dtmf/dtmf-pound.wav +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/dtmf/dtmf-star.wav +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/dtmf/types.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/dtmf/utils.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/filters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/filters/aic_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/filters/koala_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/filters/krisp_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/filters/krisp_viva_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/filters/pyrnn_local_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/interruptions/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/mixers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/resamplers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/resamplers/soxr_stream_resampler.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/turn/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/turn/smart_turn/data/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/turn/smart_turn/data/smart-turn-v3.0.onnx +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v2.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/utils.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/vad/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/vad/data/README.md +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/vad/data/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/vad/data/silero_vad_v2.onnx +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/vad/silero.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/clocks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/clocks/base_clock.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/clocks/system_clock.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/extensions/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/extensions/ivr/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/extensions/ivr/ivr_navigator.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/extensions/voicemail/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/extensions/voicemail/voicemail_detector.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/frames/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/frames/frames.proto +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/frames/frames.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/metrics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/metrics/metrics.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/observers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/observers/base_observer.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/observers/loggers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/observers/turn_tracking_observer.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/pipeline/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/pipeline/base_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/pipeline/base_task.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/pipeline/llm_switcher.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/pipeline/pipeline.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/pipeline/runner.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/pipeline/service_switcher.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/pipeline/task.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/pipeline/task_observer.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/pipeline/tts_switcher.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/aggregators/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/aggregators/dtmf_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/aggregators/gated.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/aggregators/gated_llm_context.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/aggregators/gated_open_ai_llm_context.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/aggregators/llm_context.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/aggregators/llm_response.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/aggregators/llm_response_universal.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/aggregators/sentence.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/aggregators/user_response.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/async_generator.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/audio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/consumer_processor.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/dtmf_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/filters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/filters/frame_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/filters/function_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/filters/identity_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/filters/null_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/frameworks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/frameworks/langchain.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/frameworks/rtvi.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/frameworks/strands_agents.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/gstreamer/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/idle_frame_processor.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/logger.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/metrics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/metrics/sentry.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/producer_processor.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/text_transformer.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/transcript_processor.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/processors/user_idle_processor.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/py.typed +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/runner/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/runner/daily.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/runner/livekit.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/runner/run.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/runner/types.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/runner/utils.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/serializers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/serializers/asterisk.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/serializers/base_serializer.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/serializers/convox.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/serializers/custom.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/serializers/exotel.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/serializers/livekit.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/serializers/plivo.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/serializers/protobuf.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/serializers/telnyx.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/serializers/twilio.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/serializers/vi.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/ai_service.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/ai_services.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/anthropic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/anthropic/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/assemblyai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/assemblyai/models.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/assemblyai/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/asyncai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/asyncai/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/aws/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/aws/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/aws/nova_sonic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/aws/nova_sonic/context.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/aws/nova_sonic/frames.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/aws/nova_sonic/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/aws/nova_sonic/ready.wav +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/aws/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/aws/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/aws/utils.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/azure/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/azure/common.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/azure/image.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/azure/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/azure/realtime/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/azure/realtime/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/azure/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/azure/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/cartesia/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/cartesia/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/cartesia/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/cerebras/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/cerebras/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/deepgram/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/deepgram/flux/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/deepgram/flux/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/deepgram/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/deepseek/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/deepseek/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/elevenlabs/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/elevenlabs/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/fal/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/fal/image.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/fal/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/fireworks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/fireworks/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/fish/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/fish/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/gemini_multimodal_live/file_api.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/gladia/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/gladia/config.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/gladia/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/google/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/google/frames.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/google/gemini_live/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/google/gemini_live/file_api.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/google/gemini_live/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/google/gemini_live/llm_vertex.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/google/google.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/google/image.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/google/llm_openai.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/google/llm_vertex.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/google/rtvi.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/google/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/google/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/grok/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/grok/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/groq/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/groq/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/groq/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/groq/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/hamsa/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/hamsa/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/heygen/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/heygen/api.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/heygen/client.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/heygen/video.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/hume/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/hume/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/image_service.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/inworld/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/inworld/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/llm_service.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/lmnt/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/lmnt/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/mcp_service.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/mem0/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/mem0/memory.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/minimax/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/minimax/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/mistral/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/mistral/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/moondream/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/moondream/vision.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/neuphonic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/neuphonic/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/nim/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/nim/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/ollama/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/ollama/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai/image.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai/realtime/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai/realtime/context.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai/realtime/events.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai/realtime/frames.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai/realtime/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai_realtime/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai_realtime/azure.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai_realtime/context.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai_realtime/events.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai_realtime/frames.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openpipe/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openpipe/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openrouter/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openrouter/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/perplexity/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/perplexity/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/piper/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/piper/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/playht/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/playht/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/qwen/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/qwen/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/rime/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/rime/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/riva/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/riva/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/riva/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/salesforce/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/salesforce/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/sambanova/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/sambanova/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/sambanova/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/sarvam/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/sarvam/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/sarvam/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/simli/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/simli/video.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/soniox/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/soniox/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/speechmatics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/speechmatics/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/stt_service.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/tavus/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/tavus/video.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/together/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/together/llm.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/tts_service.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/ultravox/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/ultravox/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/vision_service.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/vistaar/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/websocket_service.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/whisper/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/whisper/base_stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/whisper/stt.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/xtts/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/xtts/tts.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/sync/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/sync/base_notifier.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/sync/event_notifier.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/tests/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/tests/utils.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transcriptions/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transcriptions/language.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/base_input.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/base_output.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/base_transport.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/daily/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/daily/transport.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/daily/utils.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/heygen/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/heygen/transport.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/livekit/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/livekit/transport.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/local/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/local/audio.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/local/tk.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/network/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/network/fastapi_websocket.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/network/small_webrtc.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/network/webrtc_connection.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/network/websocket_client.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/network/websocket_server.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/services/daily.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/services/helpers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/services/livekit.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/services/tavus.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/smallwebrtc/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/smallwebrtc/connection.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/smallwebrtc/request_handler.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/smallwebrtc/transport.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/tavus/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/tavus/transport.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/websocket/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/websocket/client.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/websocket/fastapi.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/websocket/server.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/whatsapp/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/whatsapp/api.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/transports/whatsapp/client.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/asyncio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/asyncio/task_manager.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/base_object.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/logger_config.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/network.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/redis.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/string.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/text/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/text/base_text_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/time.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/tracing/__init__.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/tracing/class_decorators.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/tracing/service_attributes.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/tracing/service_decorators.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/tracing/setup.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/utils/utils.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/stop_container.yml +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/test_elevenlabs_stt_segmented.py +0 -0
- {dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/uv.lock +0 -0
|
@@ -110,6 +110,69 @@ pip install "pipecat-ai[openai,deepgram,cartesia]"
|
|
|
110
110
|
|
|
111
111
|
Pipecat is a **pipeline-based real-time AI conversation framework** for building voice-enabled, multimodal AI applications. Built around these key architectural concepts:
|
|
112
112
|
|
|
113
|
+
### Flow Cheat‑Sheet
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
(Input Transport) ──DOWNSTREAM──► [Audio/VAD/Filters] ──► [STT Service] ──►
|
|
117
|
+
| | |
|
|
118
|
+
| | └─ emits TranscriptionFrame / InterimTranscriptionFrame (DataFrame)
|
|
119
|
+
| └─ may send STTMuteFrame (SystemFrame) UPSTREAM
|
|
120
|
+
|
|
|
121
|
+
└─ sends StartFrame (SystemFrame) at boot
|
|
122
|
+
|
|
123
|
+
[Transcript Processor + Aggregators]
|
|
124
|
+
└─ combine TranscriptionFrame → produce LLMTextFrame (DataFrame)
|
|
125
|
+
|
|
126
|
+
[LLM Service]
|
|
127
|
+
├─ streams LLMTextFrame responses (DataFrame)
|
|
128
|
+
└─ may emit FunctionCallFrame / FunctionCallResultFrame
|
|
129
|
+
|
|
130
|
+
[TTS Service]
|
|
131
|
+
└─ converts LLMTextFrame → TTSAudioRawFrame (DataFrame)
|
|
132
|
+
|
|
133
|
+
(Output Transport)
|
|
134
|
+
└─ serializes TTSAudioRawFrame → client protocol (WebRTC/Telephony/etc.)
|
|
135
|
+
|
|
136
|
+
Control/interrupt frames (UserStartedSpeakingFrame, SpeechControlParamsFrame, CancelFrame…)
|
|
137
|
+
can travel UPSTREAM at any point so earlier processors/transports react immediately.
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Key points:**
|
|
141
|
+
- `FrameDirection.DOWNSTREAM` = toward later processors/services; `FrameDirection.UPSTREAM` = back toward source (e.g., mute STT, cancel playback).
|
|
142
|
+
- `SystemFrame` (StartFrame, STTMuteFrame, SpeechControlParamsFrame, ErrorFrame…) always gets priority in the processor queue so control signals are never starved.
|
|
143
|
+
- `DataFrame` carries payloads (audio/text/image): `InputAudioRawFrame`, `TTSAudioRawFrame`, `TranscriptionFrame`, `LLMTextFrame`, `FunctionCallFrame`, etc.
|
|
144
|
+
- `ControlFrame` manages flow (`EndFrame`, `UserStartedSpeakingFrame`, `InterruptionFrame`).
|
|
145
|
+
|
|
146
|
+
### Frame Life Cycle (detailed)
|
|
147
|
+
|
|
148
|
+
1. **Ingress / Transports**
|
|
149
|
+
- `BaseInputTransport` (FastAPI WebSocket, Daily WebRTC, Twilio/Plivo serializers) receives media, emits `StartFrame`, then chunks of `InputAudioRawFrame` downstream.
|
|
150
|
+
- Transports also consume upstream frames (mute/unmute, cancel) and translate them into protocol-specific control messages.
|
|
151
|
+
|
|
152
|
+
2. **Audio Front-End**
|
|
153
|
+
- Mixers, VAD analyzers (`SileroVADAnalyzer`), and noise filters act on audio frames before ASR.
|
|
154
|
+
- VAD produces `SpeechControlParamsFrame` to tune STT sensitivity; these propagate upstream/downstream as needed.
|
|
155
|
+
|
|
156
|
+
3. **STT Stage**
|
|
157
|
+
- `STTService.process_frame` buffers audio and streams `InterimTranscriptionFrame` and final `TranscriptionFrame` downstream.
|
|
158
|
+
- When speech begins/ends, STT emits `UserStartedSpeakingFrame`/`UserStoppedSpeakingFrame` upstream so transports can pause/resume playback or update UI.
|
|
159
|
+
|
|
160
|
+
4. **Context / Aggregation**
|
|
161
|
+
- `TranscriptProcessor`, `OpenAILLMContext`, and flow-specific processors collect transcription frames, manage conversation state, and finally emit `LLMTextFrame` requests.
|
|
162
|
+
|
|
163
|
+
5. **LLM Stage**
|
|
164
|
+
- `LLMService` (OpenAI/Azure/Anthropic/etc.) streams `LLMTextFrame` responses, optionally `FunctionCallFrame` + `FunctionCallResultFrame` for tool calls.
|
|
165
|
+
- `FrameProcessorMetrics` (observer) listens to this flow and emits `MetricsFrame` (TTFB, TTFT, token counts) that downstream observers (e.g., `CallMetricsCollector`) consume.
|
|
166
|
+
|
|
167
|
+
6. **TTS + Output**
|
|
168
|
+
- `TTSService` converts `LLMTextFrame` to `TTSAudioRawFrame`.
|
|
169
|
+
- `BaseOutputTransport` serializes audio into the channel’s format (raw PCM for WebRTC, base64 for telephony, etc.), until it receives `EndFrame`/`CancelFrame`.
|
|
170
|
+
|
|
171
|
+
### Diagnostics & Metrics
|
|
172
|
+
- `CallMetricsCollector` (observer) watches every `MetricsFrame`, tallying TTFT/TTFB per service, first TTS time, etc.
|
|
173
|
+
- `ServiceConnectionMonitor` wraps service `_connect()`/`_connect_websocket()` to capture real connection latencies and retry counts per call. Its data feeds the `service_connections` summary stored alongside transcripts.
|
|
174
|
+
- Both collector and monitor are stored per call id so concurrent calls never mix metrics.
|
|
175
|
+
|
|
113
176
|
### Framework Philosophy
|
|
114
177
|
- **Real-time Processing**: Conversational interactions without noticeable delays
|
|
115
178
|
- **Multimodal Support**: Combines audio, video, images, and text in interactions
|
|
@@ -371,4 +434,4 @@ def process_audio_bad(audio_data):
|
|
|
371
434
|
- Pipeline lifecycle: StartFrame → processing → EndFrame/StopFrame
|
|
372
435
|
- **Telephony**: WebSocket connections require proper call_id tracking and cleanup
|
|
373
436
|
- **Async**: Never block the event loop - use async/await for all I/O operations
|
|
374
|
-
- **Latency**: Voice AI requires sub-second response times - optimize every pipeline stage
|
|
437
|
+
- **Latency**: Voice AI requires sub-second response times - optimize every pipeline stage
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/dv_pipecat_ai.egg-info/SOURCES.txt
RENAMED
|
@@ -165,6 +165,7 @@ src/pipecat/frames/frames.proto
|
|
|
165
165
|
src/pipecat/frames/frames.py
|
|
166
166
|
src/pipecat/frames/protobufs/frames_pb2.py
|
|
167
167
|
src/pipecat/metrics/__init__.py
|
|
168
|
+
src/pipecat/metrics/connection_metrics.py
|
|
168
169
|
src/pipecat/metrics/metrics.py
|
|
169
170
|
src/pipecat/observers/__init__.py
|
|
170
171
|
src/pipecat/observers/base_observer.py
|
|
@@ -35,12 +35,15 @@ class LocalSmartTurnAnalyzerV3(BaseSmartTurn):
|
|
|
35
35
|
enabling offline operation without network dependencies.
|
|
36
36
|
"""
|
|
37
37
|
|
|
38
|
-
def __init__(
|
|
38
|
+
def __init__(
|
|
39
|
+
self, *, smart_turn_model_path: Optional[str] = None, cpu_count: int = 1, **kwargs
|
|
40
|
+
):
|
|
39
41
|
"""Initialize the local ONNX smart-turn-v3 analyzer.
|
|
40
42
|
|
|
41
43
|
Args:
|
|
42
44
|
smart_turn_model_path: Path to the ONNX model file. If this is not
|
|
43
45
|
set, the bundled smart-turn-v3.0 model will be used.
|
|
46
|
+
cpu_count: The number of CPUs to use for inference. Defaults to 1.
|
|
44
47
|
**kwargs: Additional arguments passed to BaseSmartTurn.
|
|
45
48
|
"""
|
|
46
49
|
super().__init__(**kwargs)
|
|
@@ -70,6 +73,7 @@ class LocalSmartTurnAnalyzerV3(BaseSmartTurn):
|
|
|
70
73
|
so = ort.SessionOptions()
|
|
71
74
|
so.execution_mode = ort.ExecutionMode.ORT_SEQUENTIAL
|
|
72
75
|
so.inter_op_num_threads = 1
|
|
76
|
+
so.intra_op_num_threads = cpu_count
|
|
73
77
|
so.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL
|
|
74
78
|
|
|
75
79
|
self._feature_extractor = WhisperFeatureExtractor(chunk_length=8)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""Connection metrics data models for Pipecat framework.
|
|
2
|
+
|
|
3
|
+
This module extends the core metrics system with connection-specific metrics
|
|
4
|
+
including connection establishment times, retry attempts, and network latencies.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Optional
|
|
8
|
+
|
|
9
|
+
from pydantic import BaseModel
|
|
10
|
+
|
|
11
|
+
from pipecat.metrics.metrics import MetricsData
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ConnectionMetricsData(MetricsData):
|
|
15
|
+
"""Unified connection and reconnection metrics data.
|
|
16
|
+
|
|
17
|
+
Handles both initial connection establishment and reconnection scenarios.
|
|
18
|
+
For initial connections, use connect_time, success, connection_attempts.
|
|
19
|
+
For reconnections, use reconnect_count, downtime, reconnect_success, reason.
|
|
20
|
+
|
|
21
|
+
Parameters:
|
|
22
|
+
connect_time: Time taken to establish connection in seconds.
|
|
23
|
+
success: Whether the connection attempt was successful.
|
|
24
|
+
connection_attempts: Number of connection attempts made.
|
|
25
|
+
error_message: Error message if connection failed.
|
|
26
|
+
connection_type: Type of connection (websocket, http, etc.).
|
|
27
|
+
reconnect_count: Number of reconnection attempts (for reconnection scenarios).
|
|
28
|
+
downtime: Time connection was down in seconds (for reconnection scenarios).
|
|
29
|
+
reconnect_success: Whether reconnection was successful (for reconnection scenarios).
|
|
30
|
+
reason: Reason for reconnection (for reconnection scenarios).
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
connect_time: Optional[float] = None
|
|
34
|
+
success: bool = True
|
|
35
|
+
connection_attempts: int = 1
|
|
36
|
+
error_message: Optional[str] = None
|
|
37
|
+
connection_type: Optional[str] = None
|
|
38
|
+
|
|
39
|
+
# Reconnection-specific fields
|
|
40
|
+
reconnect_count: Optional[int] = None
|
|
41
|
+
downtime: Optional[float] = None
|
|
42
|
+
reconnect_success: Optional[bool] = None
|
|
43
|
+
reason: Optional[str] = None
|
|
44
|
+
|
|
45
|
+
|
|
@@ -436,10 +436,53 @@ class FrameProcessor(BaseObject):
|
|
|
436
436
|
if frame:
|
|
437
437
|
await self.push_frame(frame)
|
|
438
438
|
|
|
439
|
+
async def start_connection_metrics(self):
|
|
440
|
+
"""Start connection establishment metrics collection."""
|
|
441
|
+
if self.can_generate_metrics() and self.metrics_enabled:
|
|
442
|
+
await self._metrics.start_connection_metrics()
|
|
443
|
+
|
|
444
|
+
async def stop_connection_metrics(
|
|
445
|
+
self,
|
|
446
|
+
success: bool = True,
|
|
447
|
+
error: str = None,
|
|
448
|
+
connection_type: str = None
|
|
449
|
+
):
|
|
450
|
+
"""Stop connection metrics collection and emit metrics frame.
|
|
451
|
+
|
|
452
|
+
Args:
|
|
453
|
+
success: Whether the connection was successful.
|
|
454
|
+
error: Error message if connection failed.
|
|
455
|
+
connection_type: Type of connection (websocket, http, etc.).
|
|
456
|
+
"""
|
|
457
|
+
if self.can_generate_metrics() and self.metrics_enabled:
|
|
458
|
+
frame = await self._metrics.stop_connection_metrics(success, error, connection_type)
|
|
459
|
+
if frame:
|
|
460
|
+
await self.push_frame(frame)
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
async def start_reconnection_metrics(self):
|
|
464
|
+
"""Start reconnection metrics collection."""
|
|
465
|
+
if self.can_generate_metrics() and self.metrics_enabled:
|
|
466
|
+
await self._metrics.start_reconnection_metrics()
|
|
467
|
+
|
|
468
|
+
async def stop_reconnection_metrics(self, success: bool = True, reason: str = None):
|
|
469
|
+
"""Stop reconnection metrics collection and emit metrics frame.
|
|
470
|
+
|
|
471
|
+
Args:
|
|
472
|
+
success: Whether the reconnection was successful.
|
|
473
|
+
reason: Reason for reconnection.
|
|
474
|
+
"""
|
|
475
|
+
if self.can_generate_metrics() and self.metrics_enabled:
|
|
476
|
+
frame = await self._metrics.stop_reconnection_metrics(success, reason)
|
|
477
|
+
if frame:
|
|
478
|
+
await self.push_frame(frame)
|
|
479
|
+
|
|
480
|
+
|
|
439
481
|
async def stop_all_metrics(self):
|
|
440
482
|
"""Stop all active metrics collection."""
|
|
441
483
|
await self.stop_ttfb_metrics()
|
|
442
484
|
await self.stop_processing_metrics()
|
|
485
|
+
await self.stop_connection_metrics()
|
|
443
486
|
|
|
444
487
|
def create_task(self, coroutine: Coroutine, name: Optional[str] = None) -> asyncio.Task:
|
|
445
488
|
"""Create a new task managed by this processor.
|
|
@@ -811,7 +854,7 @@ class FrameProcessor(BaseObject):
|
|
|
811
854
|
Returns:
|
|
812
855
|
True if the processor has been started.
|
|
813
856
|
"""
|
|
814
|
-
if not self.__started:
|
|
857
|
+
if not self.__started and not isinstance(frame, SystemFrame):
|
|
815
858
|
self.logger.error(f"{self} Trying to process {frame} but StartFrame not received yet")
|
|
816
859
|
return self.__started
|
|
817
860
|
|
|
@@ -20,6 +20,9 @@ from pipecat.metrics.metrics import (
|
|
|
20
20
|
TTFBMetricsData,
|
|
21
21
|
TTSUsageMetricsData,
|
|
22
22
|
)
|
|
23
|
+
from pipecat.metrics.connection_metrics import (
|
|
24
|
+
ConnectionMetricsData,
|
|
25
|
+
)
|
|
23
26
|
from pipecat.utils.asyncio.task_manager import BaseTaskManager
|
|
24
27
|
from pipecat.utils.base_object import BaseObject
|
|
25
28
|
|
|
@@ -46,6 +49,13 @@ class FrameProcessorMetrics(BaseObject):
|
|
|
46
49
|
self._last_ttfb_time = 0
|
|
47
50
|
self._should_report_ttfb = True
|
|
48
51
|
self._logger = logger
|
|
52
|
+
|
|
53
|
+
# Connection metrics state
|
|
54
|
+
self._start_connection_time = 0
|
|
55
|
+
self._connection_attempts = 0
|
|
56
|
+
self._last_connection_error = None
|
|
57
|
+
self._reconnection_start_time = 0
|
|
58
|
+
self._reconnect_count = 0
|
|
49
59
|
|
|
50
60
|
async def setup(self, task_manager: BaseTaskManager):
|
|
51
61
|
"""Set up the metrics collector with a task manager.
|
|
@@ -195,3 +205,101 @@ class FrameProcessorMetrics(BaseObject):
|
|
|
195
205
|
)
|
|
196
206
|
self._logger.debug(f"{self._processor_name()} usage characters: {characters.value}")
|
|
197
207
|
return MetricsFrame(data=[characters])
|
|
208
|
+
|
|
209
|
+
async def start_connection_metrics(self):
|
|
210
|
+
"""Start measuring connection establishment time."""
|
|
211
|
+
self._start_connection_time = time.time()
|
|
212
|
+
self._connection_attempts += 1
|
|
213
|
+
self._last_connection_error = None
|
|
214
|
+
|
|
215
|
+
async def stop_connection_metrics(
|
|
216
|
+
self,
|
|
217
|
+
success: bool = True,
|
|
218
|
+
error: str = None,
|
|
219
|
+
connection_type: str = None
|
|
220
|
+
):
|
|
221
|
+
"""Stop connection measurement and generate metrics frame.
|
|
222
|
+
|
|
223
|
+
Args:
|
|
224
|
+
success: Whether the connection was successful.
|
|
225
|
+
error: Error message if connection failed.
|
|
226
|
+
connection_type: Type of connection (websocket, http, etc.).
|
|
227
|
+
|
|
228
|
+
Returns:
|
|
229
|
+
MetricsFrame containing connection data, or None if not measuring.
|
|
230
|
+
"""
|
|
231
|
+
if self._start_connection_time == 0:
|
|
232
|
+
return None
|
|
233
|
+
|
|
234
|
+
connect_time = time.time() - self._start_connection_time
|
|
235
|
+
|
|
236
|
+
if not success:
|
|
237
|
+
self._last_connection_error = error
|
|
238
|
+
|
|
239
|
+
logstr = f"{self._processor_name()} connection "
|
|
240
|
+
logstr += "successful" if success else f"failed: {error}"
|
|
241
|
+
logstr += f" (attempt #{self._connection_attempts}, {connect_time:.3f}s)"
|
|
242
|
+
|
|
243
|
+
if success:
|
|
244
|
+
self._logger.debug(logstr)
|
|
245
|
+
else:
|
|
246
|
+
self._logger.warning(logstr)
|
|
247
|
+
|
|
248
|
+
connection_data = ConnectionMetricsData(
|
|
249
|
+
processor=self._processor_name(),
|
|
250
|
+
model=self._model_name(),
|
|
251
|
+
connect_time=round(connect_time, 3),
|
|
252
|
+
success=success,
|
|
253
|
+
connection_attempts=self._connection_attempts,
|
|
254
|
+
error_message=error,
|
|
255
|
+
connection_type=connection_type
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
self._start_connection_time = 0
|
|
259
|
+
return MetricsFrame(data=[connection_data])
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
async def start_reconnection_metrics(self):
|
|
263
|
+
"""Start measuring reconnection downtime."""
|
|
264
|
+
self._reconnection_start_time = time.time()
|
|
265
|
+
self._reconnect_count += 1
|
|
266
|
+
|
|
267
|
+
async def stop_reconnection_metrics(
|
|
268
|
+
self,
|
|
269
|
+
success: bool = True,
|
|
270
|
+
reason: str = None
|
|
271
|
+
):
|
|
272
|
+
"""Stop reconnection measurement and generate metrics frame.
|
|
273
|
+
|
|
274
|
+
Args:
|
|
275
|
+
success: Whether the reconnection was successful.
|
|
276
|
+
reason: Reason for reconnection.
|
|
277
|
+
|
|
278
|
+
Returns:
|
|
279
|
+
MetricsFrame containing reconnection data, or None if not measuring.
|
|
280
|
+
"""
|
|
281
|
+
if self._reconnection_start_time == 0:
|
|
282
|
+
return None
|
|
283
|
+
|
|
284
|
+
downtime = time.time() - self._reconnection_start_time
|
|
285
|
+
|
|
286
|
+
logstr = f"{self._processor_name()} reconnection #{self._reconnect_count} "
|
|
287
|
+
logstr += "successful" if success else "failed"
|
|
288
|
+
logstr += f" (downtime: {downtime:.3f}s)"
|
|
289
|
+
if reason:
|
|
290
|
+
logstr += f" - {reason}"
|
|
291
|
+
|
|
292
|
+
self._logger.debug(logstr)
|
|
293
|
+
|
|
294
|
+
reconnection_data = ConnectionMetricsData(
|
|
295
|
+
processor=self._processor_name(),
|
|
296
|
+
model=self._model_name(),
|
|
297
|
+
reconnect_count=self._reconnect_count,
|
|
298
|
+
downtime=round(downtime, 3),
|
|
299
|
+
reconnect_success=success,
|
|
300
|
+
reason=reason
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
self._reconnection_start_time = 0
|
|
304
|
+
return MetricsFrame(data=[reconnection_data])
|
|
305
|
+
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/deepgram/stt.py
RENAMED
|
@@ -388,6 +388,7 @@ class DeepgramSTTService(STTService):
|
|
|
388
388
|
|
|
389
389
|
async def _connect(self):
|
|
390
390
|
self.logger.debug("Attempting to connect to Deepgram...")
|
|
391
|
+
await self.start_connection_metrics()
|
|
391
392
|
|
|
392
393
|
loop = asyncio.get_running_loop()
|
|
393
394
|
for attempt in range(self._max_connect_retries):
|
|
@@ -489,6 +490,8 @@ class DeepgramSTTService(STTService):
|
|
|
489
490
|
elapsed_ms,
|
|
490
491
|
diagnostics,
|
|
491
492
|
)
|
|
493
|
+
await self.stop_connection_metrics(success=True, connection_type="websocket")
|
|
494
|
+
await self.stop_reconnection_metrics(success=True, reason="successful_reconnection")
|
|
492
495
|
return # Exit the method on success
|
|
493
496
|
|
|
494
497
|
self.logger.warning(
|
|
@@ -524,6 +527,12 @@ class DeepgramSTTService(STTService):
|
|
|
524
527
|
error_msg = (
|
|
525
528
|
f"{self}: unable to connect to Deepgram after {self._max_connect_retries} attempts."
|
|
526
529
|
)
|
|
530
|
+
await self.stop_connection_metrics(
|
|
531
|
+
success=False,
|
|
532
|
+
error=f"Failed after {self._max_connect_retries} attempts",
|
|
533
|
+
connection_type="websocket"
|
|
534
|
+
)
|
|
535
|
+
await self.stop_reconnection_metrics(success=False, reason="max_retries_exceeded")
|
|
527
536
|
self.logger.error(error_msg)
|
|
528
537
|
await self.push_error(ErrorFrame(error_msg, fatal=True))
|
|
529
538
|
|
|
@@ -589,6 +598,7 @@ class DeepgramSTTService(STTService):
|
|
|
589
598
|
# NOTE(aleix): we don't disconnect (i.e. call finish on the connection)
|
|
590
599
|
# because this triggers more errors internally in the Deepgram SDK. So,
|
|
591
600
|
# we just forget about the previous connection and create a new one.
|
|
601
|
+
await self.start_reconnection_metrics()
|
|
592
602
|
await self._connect()
|
|
593
603
|
|
|
594
604
|
async def _on_speech_started(self, *args, **kwargs):
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/elevenlabs/tts.py
RENAMED
|
@@ -519,6 +519,7 @@ class ElevenLabsTTSService(AudioContextWordTTSService):
|
|
|
519
519
|
return
|
|
520
520
|
|
|
521
521
|
self.logger.debug("Connecting to ElevenLabs")
|
|
522
|
+
await self.start_connection_metrics()
|
|
522
523
|
|
|
523
524
|
voice_id = self._voice_id
|
|
524
525
|
model = self.model_name
|
|
@@ -551,14 +552,19 @@ class ElevenLabsTTSService(AudioContextWordTTSService):
|
|
|
551
552
|
additional_headers={"xi-api-key": self._api_key},
|
|
552
553
|
)
|
|
553
554
|
|
|
555
|
+
await self.stop_connection_metrics(success=True, connection_type="websocket")
|
|
556
|
+
await self.stop_reconnection_metrics(success=True, reason="successful_reconnection")
|
|
554
557
|
await self._call_event_handler("on_connected")
|
|
555
558
|
except Exception as e:
|
|
556
559
|
self.logger.error(f"{self} initialization error: {e}")
|
|
560
|
+
await self.stop_connection_metrics(success=False, error=str(e), connection_type="websocket")
|
|
561
|
+
await self.stop_reconnection_metrics(success=False, reason="connection_failed")
|
|
557
562
|
self._websocket = None
|
|
558
563
|
await self._call_event_handler("on_connection_error", f"{e}")
|
|
559
564
|
|
|
560
565
|
async def _disconnect_websocket(self):
|
|
561
566
|
try:
|
|
567
|
+
await self.start_reconnection_metrics()
|
|
562
568
|
await self.stop_all_metrics()
|
|
563
569
|
|
|
564
570
|
if self._websocket:
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/google/llm.py
RENAMED
|
@@ -760,12 +760,19 @@ class GoogleLLMService(LLMService):
|
|
|
760
760
|
|
|
761
761
|
generation_config = GenerateContentConfig(system_instruction=system)
|
|
762
762
|
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
763
|
+
await self.start_connection_metrics()
|
|
764
|
+
|
|
765
|
+
try:
|
|
766
|
+
# Use the new google-genai client's async method
|
|
767
|
+
response = await self._client.aio.models.generate_content(
|
|
768
|
+
model=self._model_name,
|
|
769
|
+
contents=messages,
|
|
770
|
+
config=generation_config,
|
|
771
|
+
)
|
|
772
|
+
await self.stop_connection_metrics(success=True, connection_type="grpc")
|
|
773
|
+
except Exception as e:
|
|
774
|
+
await self.stop_connection_metrics(success=False, error=str(e), connection_type="grpc")
|
|
775
|
+
raise
|
|
769
776
|
|
|
770
777
|
# Extract text from response
|
|
771
778
|
if response.candidates and response.candidates[0].content:
|
|
@@ -849,11 +856,19 @@ class GoogleLLMService(LLMService):
|
|
|
849
856
|
)
|
|
850
857
|
|
|
851
858
|
await self.start_ttfb_metrics()
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
859
|
+
await self.start_connection_metrics()
|
|
860
|
+
|
|
861
|
+
try:
|
|
862
|
+
result = await self._client.aio.models.generate_content_stream(
|
|
863
|
+
model=self._model_name,
|
|
864
|
+
contents=messages,
|
|
865
|
+
config=generation_config,
|
|
866
|
+
)
|
|
867
|
+
await self.stop_connection_metrics(success=True, connection_type="grpc")
|
|
868
|
+
return result
|
|
869
|
+
except Exception as e:
|
|
870
|
+
await self.stop_connection_metrics(success=False, error=str(e), connection_type="grpc")
|
|
871
|
+
raise
|
|
857
872
|
|
|
858
873
|
async def _stream_content_specific_context(
|
|
859
874
|
self, context: OpenAILLMContext
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/openai/base_llm.py
RENAMED
|
@@ -205,20 +205,29 @@ class BaseOpenAILLMService(LLMService):
|
|
|
205
205
|
"""
|
|
206
206
|
params = self.build_chat_completion_params(params_from_context)
|
|
207
207
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
208
|
+
await self.start_connection_metrics()
|
|
209
|
+
|
|
210
|
+
try:
|
|
211
|
+
if self._retry_on_timeout:
|
|
212
|
+
try:
|
|
213
|
+
chunks = await asyncio.wait_for(
|
|
214
|
+
self._client.chat.completions.create(**params), timeout=self._retry_timeout_secs
|
|
215
|
+
)
|
|
216
|
+
await self.stop_connection_metrics(success=True, connection_type="http")
|
|
217
|
+
return chunks
|
|
218
|
+
except (APITimeoutError, asyncio.TimeoutError):
|
|
219
|
+
# Retry, this time without a timeout so we get a response
|
|
220
|
+
logger.debug(f"{self}: Retrying chat completion due to timeout")
|
|
221
|
+
chunks = await self._client.chat.completions.create(**params)
|
|
222
|
+
await self.stop_connection_metrics(success=True, connection_type="http")
|
|
223
|
+
return chunks
|
|
224
|
+
else:
|
|
217
225
|
chunks = await self._client.chat.completions.create(**params)
|
|
226
|
+
await self.stop_connection_metrics(success=True, connection_type="http")
|
|
218
227
|
return chunks
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
228
|
+
except Exception as e:
|
|
229
|
+
await self.stop_connection_metrics(success=False, error=str(e), connection_type="http")
|
|
230
|
+
raise
|
|
222
231
|
|
|
223
232
|
def build_chat_completion_params(self, params_from_context: OpenAILLMInvocationParams) -> dict:
|
|
224
233
|
"""Build parameters for chat completion request.
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/src/pipecat/services/vistaar/llm.py
RENAMED
|
@@ -344,9 +344,12 @@ class VistaarLLMService(LLMService):
|
|
|
344
344
|
logger.error(f"Failed to generate JWT token: {e}")
|
|
345
345
|
raise
|
|
346
346
|
|
|
347
|
+
await self.start_connection_metrics()
|
|
348
|
+
|
|
347
349
|
try:
|
|
348
350
|
# Use httpx to handle SSE streaming
|
|
349
351
|
async with self._client.stream("GET", url, headers=headers) as response:
|
|
352
|
+
await self.stop_connection_metrics(success=True, connection_type="http")
|
|
350
353
|
self._current_response = response # Store for potential cancellation
|
|
351
354
|
response.raise_for_status()
|
|
352
355
|
|
|
@@ -364,14 +367,17 @@ class VistaarLLMService(LLMService):
|
|
|
364
367
|
yield line
|
|
365
368
|
|
|
366
369
|
except httpx.HTTPStatusError as e:
|
|
370
|
+
await self.stop_connection_metrics(success=False, error=f"HTTP {e.response.status_code}", connection_type="http")
|
|
367
371
|
logger.error(
|
|
368
372
|
f"Vistaar HTTP error - Status: {e.response.status_code}, URL: {url}, Response: {e.response.text if hasattr(e.response, 'text') else 'N/A'}"
|
|
369
373
|
)
|
|
370
374
|
raise
|
|
371
375
|
except httpx.TimeoutException as e:
|
|
376
|
+
await self.stop_connection_metrics(success=False, error="Timeout", connection_type="http")
|
|
372
377
|
logger.error(f"Vistaar timeout error - URL: {url}, Timeout: {self._timeout}s")
|
|
373
378
|
raise
|
|
374
379
|
except Exception as e:
|
|
380
|
+
await self.stop_connection_metrics(success=False, error=str(e), connection_type="http")
|
|
375
381
|
logger.error(
|
|
376
382
|
f"Vistaar unexpected error - Type: {type(e).__name__}, Message: {str(e)}, URL: {url}"
|
|
377
383
|
)
|
|
File without changes
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/ISSUE_TEMPLATE/1-bug_report.yml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/ISSUE_TEMPLATE/2-question.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/ISSUE_TEMPLATE/5-new-service.yml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/ISSUE_TEMPLATE/6-dependency.yml
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/ISSUE_TEMPLATE/config.yml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/PULL_REQUEST_TEMPLATE.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/force_push_to_pypi.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/promote-prod.yml
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/publish_test.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/set-traffic-split.yml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/.github/workflows/sync-quickstart.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.85.dev856 → dv_pipecat_ai-0.0.85.dev858}/DOCKER_BUILD_OPTIMIZATION_SUMMARY.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|