dv-pipecat-ai 0.0.85.dev848__tar.gz → 0.0.85.dev851__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.

Files changed (503) hide show
  1. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/PKG-INFO +1 -1
  2. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/dv_pipecat_ai.egg-info/PKG-INFO +1 -1
  3. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/deepgram/stt.py +248 -5
  4. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/elevenlabs/stt.py +87 -30
  5. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.dockerignore +0 -0
  6. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
  7. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
  8. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
  9. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
  10. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
  11. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
  12. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
  13. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  14. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  15. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/workflows/build.yaml +0 -0
  16. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/workflows/coverage.yaml +0 -0
  17. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/workflows/force_push_to_pypi.yml +0 -0
  18. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/workflows/format.yaml +0 -0
  19. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/workflows/github.yml +0 -0
  20. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/workflows/promote-prod.yml +0 -0
  21. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/workflows/publish.yaml +0 -0
  22. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/workflows/publish_test.yaml +0 -0
  23. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/workflows/python-compatibility.yaml +0 -0
  24. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/workflows/set-traffic-split.yml +0 -0
  25. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/workflows/sync-quickstart.yaml +0 -0
  26. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.github/workflows/tests.yaml +0 -0
  27. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.gitignore +0 -0
  28. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.pre-commit-config.yaml +0 -0
  29. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/.readthedocs.yaml +0 -0
  30. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/CHANGELOG.md +0 -0
  31. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/CHANGELOG.md.template +0 -0
  32. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/CLAUDE.md +0 -0
  33. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/COMMUNITY_INTEGRATIONS.md +0 -0
  34. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/CONTRIBUTING.md +0 -0
  35. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/DOCKER_BUILD_OPTIMIZATION_SUMMARY.md +0 -0
  36. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/LICENSE +0 -0
  37. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/MANIFEST.in +0 -0
  38. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/README.md +0 -0
  39. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/SECURITY.md +0 -0
  40. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/ansible.cfg +0 -0
  41. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/ansible_deployment.sh +0 -0
  42. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/cleanup_old_containers.yml +0 -0
  43. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/codecov.yml +0 -0
  44. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/create-new-machine/ansible.cfg +0 -0
  45. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/create-new-machine/ansible_setup.sh +0 -0
  46. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/create-new-machine/inventory.ini +0 -0
  47. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/create-new-machine/replace_env.yml +0 -0
  48. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/create-new-machine/setup_playbook.yml +0 -0
  49. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/create_inventory.py +0 -0
  50. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/delete_old_dockers.sh +0 -0
  51. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/deploy.sh +0 -0
  52. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/deploy_playbook.yml +0 -0
  53. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/docker-compose.dev.yml +0 -0
  54. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/dump_logs.yml +0 -0
  55. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/env.example +0 -0
  56. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/fetch_logs.yml +0 -0
  57. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/inventory.ini +0 -0
  58. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/.helmignore +0 -0
  59. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/Chart.yaml +0 -0
  60. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
  61. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
  62. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/templates/cluster-role.yaml +0 -0
  63. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
  64. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
  65. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
  66. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/templates/keda-api-key-secret.yaml +0 -0
  67. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/templates/keda-scaledobject.yaml +0 -0
  68. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/templates/keda-trigger-auth.yaml +0 -0
  69. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/templates/pdb.yaml +0 -0
  70. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/templates/service.yaml +0 -0
  71. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/values-canary.yaml +0 -0
  72. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/values-prod.yaml +0 -0
  73. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/values-stage.yaml +0 -0
  74. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/dv-pipecat/values.yaml +0 -0
  75. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/k8s/istio/destination-virtualservice.yaml +0 -0
  76. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/merge-code-into-single-file.sh +0 -0
  77. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/pipecat.png +0 -0
  78. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/pyproject.toml +0 -0
  79. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/restart.sh +0 -0
  80. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/restart_playbook.yml +0 -0
  81. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/setup.cfg +0 -0
  82. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/dv_pipecat_ai.egg-info/SOURCES.txt +0 -0
  83. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
  84. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/dv_pipecat_ai.egg-info/requires.txt +0 -0
  85. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
  86. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/__init__.py +0 -0
  87. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/adapters/__init__.py +0 -0
  88. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/adapters/base_llm_adapter.py +0 -0
  89. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/adapters/schemas/__init__.py +0 -0
  90. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/adapters/schemas/direct_function.py +0 -0
  91. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/adapters/schemas/function_schema.py +0 -0
  92. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
  93. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/adapters/services/__init__.py +0 -0
  94. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
  95. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
  96. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
  97. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
  98. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
  99. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
  100. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/__init__.py +0 -0
  101. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/dtmf/__init__.py +0 -0
  102. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/dtmf/dtmf-0.wav +0 -0
  103. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/dtmf/dtmf-1.wav +0 -0
  104. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/dtmf/dtmf-2.wav +0 -0
  105. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/dtmf/dtmf-3.wav +0 -0
  106. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/dtmf/dtmf-4.wav +0 -0
  107. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/dtmf/dtmf-5.wav +0 -0
  108. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/dtmf/dtmf-6.wav +0 -0
  109. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/dtmf/dtmf-7.wav +0 -0
  110. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/dtmf/dtmf-8.wav +0 -0
  111. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/dtmf/dtmf-9.wav +0 -0
  112. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/dtmf/dtmf-pound.wav +0 -0
  113. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/dtmf/dtmf-star.wav +0 -0
  114. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/dtmf/types.py +0 -0
  115. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/dtmf/utils.py +0 -0
  116. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/filters/__init__.py +0 -0
  117. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/filters/aic_filter.py +0 -0
  118. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
  119. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/filters/koala_filter.py +0 -0
  120. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/filters/krisp_filter.py +0 -0
  121. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/filters/krisp_viva_filter.py +0 -0
  122. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
  123. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/filters/pyrnn_local_filter.py +0 -0
  124. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/interruptions/__init__.py +0 -0
  125. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
  126. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
  127. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/mixers/__init__.py +0 -0
  128. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
  129. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
  130. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/resamplers/__init__.py +0 -0
  131. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
  132. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
  133. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
  134. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/resamplers/soxr_stream_resampler.py +0 -0
  135. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/turn/__init__.py +0 -0
  136. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
  137. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
  138. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
  139. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/turn/smart_turn/data/__init__.py +0 -0
  140. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/turn/smart_turn/data/smart-turn-v3.0.onnx +0 -0
  141. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
  142. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
  143. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
  144. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
  145. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v2.py +0 -0
  146. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v3.py +0 -0
  147. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/utils.py +0 -0
  148. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/vad/__init__.py +0 -0
  149. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/vad/data/README.md +0 -0
  150. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/vad/data/__init__.py +0 -0
  151. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
  152. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/vad/data/silero_vad_v2.onnx +0 -0
  153. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/vad/silero.py +0 -0
  154. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
  155. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/clocks/__init__.py +0 -0
  156. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/clocks/base_clock.py +0 -0
  157. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/clocks/system_clock.py +0 -0
  158. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/extensions/__init__.py +0 -0
  159. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/extensions/ivr/__init__.py +0 -0
  160. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/extensions/ivr/ivr_navigator.py +0 -0
  161. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/extensions/voicemail/__init__.py +0 -0
  162. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/extensions/voicemail/voicemail_detector.py +0 -0
  163. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/frames/__init__.py +0 -0
  164. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/frames/frames.proto +0 -0
  165. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/frames/frames.py +0 -0
  166. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
  167. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/metrics/__init__.py +0 -0
  168. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/metrics/metrics.py +0 -0
  169. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/observers/__init__.py +0 -0
  170. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/observers/base_observer.py +0 -0
  171. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/observers/loggers/__init__.py +0 -0
  172. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
  173. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
  174. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
  175. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
  176. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/observers/turn_tracking_observer.py +0 -0
  177. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/pipeline/__init__.py +0 -0
  178. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/pipeline/base_pipeline.py +0 -0
  179. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/pipeline/base_task.py +0 -0
  180. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/pipeline/llm_switcher.py +0 -0
  181. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
  182. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/pipeline/pipeline.py +0 -0
  183. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/pipeline/runner.py +0 -0
  184. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/pipeline/service_switcher.py +0 -0
  185. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
  186. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/pipeline/task.py +0 -0
  187. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/pipeline/task_observer.py +0 -0
  188. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
  189. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/pipeline/tts_switcher.py +0 -0
  190. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/__init__.py +0 -0
  191. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/aggregators/__init__.py +0 -0
  192. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/aggregators/dtmf_aggregator.py +0 -0
  193. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/aggregators/gated.py +0 -0
  194. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/aggregators/gated_llm_context.py +0 -0
  195. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/aggregators/gated_open_ai_llm_context.py +0 -0
  196. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/aggregators/llm_context.py +0 -0
  197. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/aggregators/llm_response.py +0 -0
  198. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/aggregators/llm_response_universal.py +0 -0
  199. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
  200. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/aggregators/sentence.py +0 -0
  201. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/aggregators/user_response.py +0 -0
  202. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
  203. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/async_generator.py +0 -0
  204. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/audio/__init__.py +0 -0
  205. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
  206. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/consumer_processor.py +0 -0
  207. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/dtmf_aggregator.py +0 -0
  208. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/filters/__init__.py +0 -0
  209. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/filters/frame_filter.py +0 -0
  210. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/filters/function_filter.py +0 -0
  211. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/filters/identity_filter.py +0 -0
  212. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/filters/null_filter.py +0 -0
  213. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
  214. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
  215. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
  216. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/frame_processor.py +0 -0
  217. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/frameworks/__init__.py +0 -0
  218. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/frameworks/langchain.py +0 -0
  219. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/frameworks/rtvi.py +0 -0
  220. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/frameworks/strands_agents.py +0 -0
  221. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/gstreamer/__init__.py +0 -0
  222. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
  223. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/idle_frame_processor.py +0 -0
  224. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/logger.py +0 -0
  225. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/metrics/__init__.py +0 -0
  226. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/metrics/frame_processor_metrics.py +0 -0
  227. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/metrics/sentry.py +0 -0
  228. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/producer_processor.py +0 -0
  229. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/text_transformer.py +0 -0
  230. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/transcript_processor.py +0 -0
  231. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
  232. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/processors/user_idle_processor.py +0 -0
  233. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/py.typed +0 -0
  234. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/runner/__init__.py +0 -0
  235. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/runner/daily.py +0 -0
  236. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/runner/livekit.py +0 -0
  237. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/runner/run.py +0 -0
  238. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/runner/types.py +0 -0
  239. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/runner/utils.py +0 -0
  240. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/serializers/__init__.py +0 -0
  241. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/serializers/asterisk.py +0 -0
  242. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/serializers/base_serializer.py +0 -0
  243. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/serializers/convox.py +0 -0
  244. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/serializers/custom.py +0 -0
  245. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/serializers/exotel.py +0 -0
  246. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/serializers/livekit.py +0 -0
  247. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/serializers/plivo.py +0 -0
  248. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/serializers/protobuf.py +0 -0
  249. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/serializers/telnyx.py +0 -0
  250. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/serializers/twilio.py +0 -0
  251. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/serializers/vi.py +0 -0
  252. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/__init__.py +0 -0
  253. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/ai_service.py +0 -0
  254. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/ai_services.py +0 -0
  255. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/anthropic/__init__.py +0 -0
  256. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/anthropic/llm.py +0 -0
  257. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/assemblyai/__init__.py +0 -0
  258. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/assemblyai/models.py +0 -0
  259. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/assemblyai/stt.py +0 -0
  260. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/asyncai/__init__.py +0 -0
  261. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/asyncai/tts.py +0 -0
  262. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/aws/__init__.py +0 -0
  263. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/aws/llm.py +0 -0
  264. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/aws/nova_sonic/__init__.py +0 -0
  265. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/aws/nova_sonic/context.py +0 -0
  266. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/aws/nova_sonic/frames.py +0 -0
  267. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/aws/nova_sonic/llm.py +0 -0
  268. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/aws/nova_sonic/ready.wav +0 -0
  269. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/aws/stt.py +0 -0
  270. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/aws/tts.py +0 -0
  271. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/aws/utils.py +0 -0
  272. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
  273. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
  274. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
  275. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
  276. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/azure/__init__.py +0 -0
  277. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/azure/common.py +0 -0
  278. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/azure/image.py +0 -0
  279. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/azure/llm.py +0 -0
  280. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/azure/realtime/__init__.py +0 -0
  281. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/azure/realtime/llm.py +0 -0
  282. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/azure/stt.py +0 -0
  283. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/azure/tts.py +0 -0
  284. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/cartesia/__init__.py +0 -0
  285. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/cartesia/stt.py +0 -0
  286. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/cartesia/tts.py +0 -0
  287. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/cerebras/__init__.py +0 -0
  288. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/cerebras/llm.py +0 -0
  289. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/deepgram/__init__.py +0 -0
  290. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/deepgram/flux/__init__.py +0 -0
  291. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/deepgram/flux/stt.py +0 -0
  292. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/deepgram/tts.py +0 -0
  293. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/deepseek/__init__.py +0 -0
  294. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/deepseek/llm.py +0 -0
  295. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/elevenlabs/__init__.py +0 -0
  296. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/elevenlabs/tts.py +0 -0
  297. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/fal/__init__.py +0 -0
  298. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/fal/image.py +0 -0
  299. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/fal/stt.py +0 -0
  300. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/fireworks/__init__.py +0 -0
  301. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/fireworks/llm.py +0 -0
  302. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/fish/__init__.py +0 -0
  303. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/fish/tts.py +0 -0
  304. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
  305. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
  306. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/gemini_multimodal_live/file_api.py +0 -0
  307. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
  308. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/gladia/__init__.py +0 -0
  309. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/gladia/config.py +0 -0
  310. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/gladia/stt.py +0 -0
  311. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/google/__init__.py +0 -0
  312. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/google/frames.py +0 -0
  313. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/google/gemini_live/__init__.py +0 -0
  314. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/google/gemini_live/file_api.py +0 -0
  315. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/google/gemini_live/llm.py +0 -0
  316. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/google/gemini_live/llm_vertex.py +0 -0
  317. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/google/google.py +0 -0
  318. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/google/image.py +0 -0
  319. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/google/llm.py +0 -0
  320. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/google/llm_openai.py +0 -0
  321. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/google/llm_vertex.py +0 -0
  322. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/google/rtvi.py +0 -0
  323. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/google/stt.py +0 -0
  324. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/google/tts.py +0 -0
  325. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/grok/__init__.py +0 -0
  326. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/grok/llm.py +0 -0
  327. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/groq/__init__.py +0 -0
  328. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/groq/llm.py +0 -0
  329. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/groq/stt.py +0 -0
  330. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/groq/tts.py +0 -0
  331. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/hamsa/__init__.py +0 -0
  332. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/hamsa/stt.py +0 -0
  333. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/heygen/__init__.py +0 -0
  334. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/heygen/api.py +0 -0
  335. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/heygen/client.py +0 -0
  336. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/heygen/video.py +0 -0
  337. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/hume/__init__.py +0 -0
  338. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/hume/tts.py +0 -0
  339. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/image_service.py +0 -0
  340. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/inworld/__init__.py +0 -0
  341. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/inworld/tts.py +0 -0
  342. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/llm_service.py +0 -0
  343. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/lmnt/__init__.py +0 -0
  344. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/lmnt/tts.py +0 -0
  345. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/mcp_service.py +0 -0
  346. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/mem0/__init__.py +0 -0
  347. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/mem0/memory.py +0 -0
  348. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/minimax/__init__.py +0 -0
  349. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/minimax/tts.py +0 -0
  350. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/mistral/__init__.py +0 -0
  351. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/mistral/llm.py +0 -0
  352. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/moondream/__init__.py +0 -0
  353. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/moondream/vision.py +0 -0
  354. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/neuphonic/__init__.py +0 -0
  355. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/neuphonic/tts.py +0 -0
  356. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/nim/__init__.py +0 -0
  357. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/nim/llm.py +0 -0
  358. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/ollama/__init__.py +0 -0
  359. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/ollama/llm.py +0 -0
  360. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai/__init__.py +0 -0
  361. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai/base_llm.py +0 -0
  362. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai/image.py +0 -0
  363. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai/llm.py +0 -0
  364. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai/realtime/__init__.py +0 -0
  365. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai/realtime/context.py +0 -0
  366. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai/realtime/events.py +0 -0
  367. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai/realtime/frames.py +0 -0
  368. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai/realtime/llm.py +0 -0
  369. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai/stt.py +0 -0
  370. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai/tts.py +0 -0
  371. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai_realtime/__init__.py +0 -0
  372. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai_realtime/azure.py +0 -0
  373. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai_realtime/context.py +0 -0
  374. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai_realtime/events.py +0 -0
  375. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai_realtime/frames.py +0 -0
  376. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
  377. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
  378. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
  379. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
  380. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
  381. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
  382. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openpipe/__init__.py +0 -0
  383. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openpipe/llm.py +0 -0
  384. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openrouter/__init__.py +0 -0
  385. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/openrouter/llm.py +0 -0
  386. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/perplexity/__init__.py +0 -0
  387. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/perplexity/llm.py +0 -0
  388. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/piper/__init__.py +0 -0
  389. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/piper/tts.py +0 -0
  390. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/playht/__init__.py +0 -0
  391. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/playht/tts.py +0 -0
  392. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/qwen/__init__.py +0 -0
  393. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/qwen/llm.py +0 -0
  394. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/rime/__init__.py +0 -0
  395. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/rime/tts.py +0 -0
  396. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/riva/__init__.py +0 -0
  397. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/riva/stt.py +0 -0
  398. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/riva/tts.py +0 -0
  399. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/salesforce/__init__.py +0 -0
  400. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/salesforce/llm.py +0 -0
  401. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/sambanova/__init__.py +0 -0
  402. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/sambanova/llm.py +0 -0
  403. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/sambanova/stt.py +0 -0
  404. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/sarvam/__init__.py +0 -0
  405. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/sarvam/stt.py +0 -0
  406. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/sarvam/tts.py +0 -0
  407. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/simli/__init__.py +0 -0
  408. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/simli/video.py +0 -0
  409. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/soniox/__init__.py +0 -0
  410. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/soniox/stt.py +0 -0
  411. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/speechmatics/__init__.py +0 -0
  412. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/speechmatics/stt.py +0 -0
  413. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/stt_service.py +0 -0
  414. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/tavus/__init__.py +0 -0
  415. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/tavus/video.py +0 -0
  416. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/together/__init__.py +0 -0
  417. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/together/llm.py +0 -0
  418. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/tts_service.py +0 -0
  419. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/ultravox/__init__.py +0 -0
  420. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/ultravox/stt.py +0 -0
  421. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/vision_service.py +0 -0
  422. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/vistaar/__init__.py +0 -0
  423. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/vistaar/llm.py +0 -0
  424. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/websocket_service.py +0 -0
  425. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/whisper/__init__.py +0 -0
  426. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/whisper/base_stt.py +0 -0
  427. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/whisper/stt.py +0 -0
  428. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/xtts/__init__.py +0 -0
  429. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/services/xtts/tts.py +0 -0
  430. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/sync/__init__.py +0 -0
  431. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/sync/base_notifier.py +0 -0
  432. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/sync/event_notifier.py +0 -0
  433. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/tests/__init__.py +0 -0
  434. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/tests/utils.py +0 -0
  435. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transcriptions/__init__.py +0 -0
  436. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transcriptions/language.py +0 -0
  437. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/__init__.py +0 -0
  438. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/base_input.py +0 -0
  439. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/base_output.py +0 -0
  440. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/base_transport.py +0 -0
  441. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/daily/__init__.py +0 -0
  442. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/daily/transport.py +0 -0
  443. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/daily/utils.py +0 -0
  444. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/heygen/__init__.py +0 -0
  445. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/heygen/transport.py +0 -0
  446. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/livekit/__init__.py +0 -0
  447. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/livekit/transport.py +0 -0
  448. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/local/__init__.py +0 -0
  449. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/local/audio.py +0 -0
  450. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/local/tk.py +0 -0
  451. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/network/__init__.py +0 -0
  452. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/network/fastapi_websocket.py +0 -0
  453. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/network/small_webrtc.py +0 -0
  454. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/network/webrtc_connection.py +0 -0
  455. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/network/websocket_client.py +0 -0
  456. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/network/websocket_server.py +0 -0
  457. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/services/__init__.py +0 -0
  458. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/services/daily.py +0 -0
  459. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/services/helpers/__init__.py +0 -0
  460. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
  461. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/services/livekit.py +0 -0
  462. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/services/tavus.py +0 -0
  463. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/smallwebrtc/__init__.py +0 -0
  464. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/smallwebrtc/connection.py +0 -0
  465. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/smallwebrtc/request_handler.py +0 -0
  466. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/smallwebrtc/transport.py +0 -0
  467. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/tavus/__init__.py +0 -0
  468. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/tavus/transport.py +0 -0
  469. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/websocket/__init__.py +0 -0
  470. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/websocket/client.py +0 -0
  471. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/websocket/fastapi.py +0 -0
  472. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/websocket/server.py +0 -0
  473. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/whatsapp/__init__.py +0 -0
  474. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/whatsapp/api.py +0 -0
  475. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/transports/whatsapp/client.py +0 -0
  476. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/__init__.py +0 -0
  477. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/asyncio/__init__.py +0 -0
  478. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/asyncio/task_manager.py +0 -0
  479. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/base_object.py +0 -0
  480. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/logger_config.py +0 -0
  481. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/network.py +0 -0
  482. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/redis.py +0 -0
  483. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/string.py +0 -0
  484. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/text/__init__.py +0 -0
  485. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
  486. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/text/base_text_filter.py +0 -0
  487. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
  488. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
  489. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
  490. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
  491. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/time.py +0 -0
  492. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/tracing/__init__.py +0 -0
  493. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/tracing/class_decorators.py +0 -0
  494. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
  495. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/tracing/service_attributes.py +0 -0
  496. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/tracing/service_decorators.py +0 -0
  497. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/tracing/setup.py +0 -0
  498. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
  499. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
  500. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/src/pipecat/utils/utils.py +0 -0
  501. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/stop_container.yml +0 -0
  502. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/test_elevenlabs_stt_segmented.py +0 -0
  503. {dv_pipecat_ai-0.0.85.dev848 → dv_pipecat_ai-0.0.85.dev851}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.85.dev848
3
+ Version: 0.0.85.dev851
4
4
  Summary: An open source framework for voice (and multimodal) assistants
5
5
  License-Expression: BSD-2-Clause
6
6
  Project-URL: Source, https://github.com/pipecat-ai/pipecat
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.85.dev848
3
+ Version: 0.0.85.dev851
4
4
  Summary: An open source framework for voice (and multimodal) assistants
5
5
  License-Expression: BSD-2-Clause
6
6
  Project-URL: Source, https://github.com/pipecat-ai/pipecat
@@ -8,7 +8,11 @@
8
8
 
9
9
  import asyncio
10
10
  import logging
11
- from typing import AsyncGenerator, Dict, Optional
11
+ import os
12
+ import socket
13
+ import time
14
+ from typing import AsyncGenerator, Callable, Dict, Optional
15
+ from urllib.parse import urlparse
12
16
 
13
17
  from loguru import logger
14
18
 
@@ -29,6 +33,155 @@ from pipecat.transcriptions.language import Language
29
33
  from pipecat.utils.time import time_now_iso8601
30
34
  from pipecat.utils.tracing.service_decorators import traced_stt
31
35
 
36
+ _PROCESS_START_MONOTONIC = time.monotonic()
37
+
38
+
39
+ def _read_first_numeric_file(paths):
40
+ for path in paths:
41
+ try:
42
+ with open(path, "r", encoding="utf-8") as file:
43
+ value = file.read().strip()
44
+ except FileNotFoundError:
45
+ continue
46
+ except OSError:
47
+ continue
48
+
49
+ if not value or value == "max":
50
+ return None
51
+
52
+ try:
53
+ return int(value)
54
+ except ValueError:
55
+ continue
56
+ return None
57
+
58
+
59
+ def _read_proc_status_value(key):
60
+ try:
61
+ with open("/proc/self/status", "r", encoding="utf-8") as status_file:
62
+ for line in status_file:
63
+ if line.startswith(key):
64
+ parts = line.split()
65
+ if len(parts) >= 2:
66
+ return int(parts[1]) * 1024 # kB -> bytes
67
+ except FileNotFoundError:
68
+ return None
69
+ except OSError:
70
+ return None
71
+ return None
72
+
73
+
74
+ def _read_cpu_throttling():
75
+ paths = ["/sys/fs/cgroup/cpu.stat", "/sys/fs/cgroup/cpu/cpu.stat"]
76
+ for path in paths:
77
+ try:
78
+ with open(path, "r", encoding="utf-8") as cpu_file:
79
+ for line in cpu_file:
80
+ if line.startswith("nr_throttled"):
81
+ parts = line.split()
82
+ if len(parts) >= 2:
83
+ return int(parts[1])
84
+ except FileNotFoundError:
85
+ continue
86
+ except OSError:
87
+ continue
88
+ return None
89
+
90
+
91
+ def _collect_runtime_diagnostics(
92
+ loop: Optional[asyncio.AbstractEventLoop] = None,
93
+ extra_context: Optional[Dict] = None,
94
+ context_provider: Optional[Callable[[], Dict]] = None,
95
+ ):
96
+ if loop is None:
97
+ try:
98
+ loop = asyncio.get_running_loop()
99
+ except RuntimeError:
100
+ loop = None
101
+
102
+ uptime_s = round(time.monotonic() - _PROCESS_START_MONOTONIC, 1)
103
+ rss_bytes = _read_proc_status_value("VmRSS:")
104
+ rss_mb = round(rss_bytes / (1024**2), 2) if rss_bytes else None
105
+
106
+ cgroup_usage_bytes = _read_first_numeric_file(
107
+ ["/sys/fs/cgroup/memory.current", "/sys/fs/cgroup/memory/memory.usage_in_bytes"]
108
+ )
109
+ cgroup_limit_bytes = _read_first_numeric_file(
110
+ ["/sys/fs/cgroup/memory.max", "/sys/fs/cgroup/memory/memory.limit_in_bytes"]
111
+ )
112
+ cgroup_usage_mb = (
113
+ round(cgroup_usage_bytes / (1024**2), 2) if cgroup_usage_bytes is not None else None
114
+ )
115
+ cgroup_limit_mb = (
116
+ round(cgroup_limit_bytes / (1024**2), 2) if cgroup_limit_bytes not in (None, 0) else None
117
+ )
118
+ cgroup_pct = (
119
+ round(cgroup_usage_bytes / cgroup_limit_bytes * 100, 2)
120
+ if cgroup_usage_bytes is not None and cgroup_limit_bytes not in (None, 0)
121
+ else None
122
+ )
123
+
124
+ try:
125
+ open_fds = len(os.listdir("/proc/self/fd"))
126
+ except Exception:
127
+ open_fds = None
128
+
129
+ pending_tasks = None
130
+ if loop:
131
+ try:
132
+ pending_tasks = len(asyncio.all_tasks(loop))
133
+ except Exception:
134
+ pending_tasks = None
135
+
136
+ suspected_cause = "unknown"
137
+ if cgroup_pct and cgroup_pct >= 90:
138
+ suspected_cause = "memory_pressure"
139
+ elif uptime_s < 180:
140
+ suspected_cause = "pod_cold_start"
141
+
142
+ diagnostics = {
143
+ "uptime_s": uptime_s,
144
+ "rss_mb": rss_mb,
145
+ "cgroup_usage_mb": cgroup_usage_mb,
146
+ "cgroup_limit_mb": cgroup_limit_mb,
147
+ "cgroup_usage_pct": cgroup_pct,
148
+ "open_fds": open_fds,
149
+ "pending_tasks": pending_tasks,
150
+ "suspected_cause": suspected_cause,
151
+ }
152
+ cpu_throttled = _read_cpu_throttling()
153
+ if cpu_throttled is not None:
154
+ diagnostics["cpu_nr_throttled"] = cpu_throttled
155
+
156
+ if context_provider:
157
+ try:
158
+ ctx = context_provider() or {}
159
+ if isinstance(ctx, dict):
160
+ diagnostics.update({k: v for k, v in ctx.items() if v is not None})
161
+ except Exception as exc:
162
+ diagnostics["context_provider_error"] = str(exc)
163
+
164
+ if extra_context:
165
+ diagnostics.update({k: v for k, v in extra_context.items() if v is not None})
166
+
167
+ return {k: v for k, v in diagnostics.items() if v is not None}
168
+
169
+
170
+ def _derive_connect_endpoint(base_url: str):
171
+ if not base_url:
172
+ return "api.deepgram.com", 443
173
+
174
+ parsed = urlparse(base_url)
175
+ host = parsed.hostname or "api.deepgram.com"
176
+ if parsed.port:
177
+ port = parsed.port
178
+ elif parsed.scheme in ("https", "wss"):
179
+ port = 443
180
+ else:
181
+ port = 80
182
+ return host, port
183
+
184
+
32
185
  try:
33
186
  from deepgram import (
34
187
  AsyncListenWebSocketClient,
@@ -64,6 +217,7 @@ class DeepgramSTTService(STTService):
64
217
  addons: Optional[Dict] = None,
65
218
  max_connect_retries: int = 3,
66
219
  connect_timeout_s: float = 2.5,
220
+ diagnostics_context_provider: Optional[Callable[[], Dict]] = None,
67
221
  **kwargs,
68
222
  ):
69
223
  """Initialize the Deepgram STT service.
@@ -82,6 +236,9 @@ class DeepgramSTTService(STTService):
82
236
  max_connect_retries: Maximum number of connection attempts before giving up.
83
237
  connect_timeout_s: Maximum time in seconds to wait for a connection attempt.
84
238
  Connection retries wait 100ms between attempts.
239
+ diagnostics_context_provider: Optional callable returning a dict with
240
+ additional runtime diagnostics (e.g., active call counts) to append
241
+ to warning logs.
85
242
  **kwargs: Additional arguments passed to the parent STTService.
86
243
  """
87
244
  sample_rate = sample_rate or (live_options.sample_rate if live_options else None)
@@ -125,6 +282,7 @@ class DeepgramSTTService(STTService):
125
282
  self.set_model_name(merged_options["model"])
126
283
  self._settings = merged_options
127
284
  self._addons = addons
285
+ self._diagnostics_context_provider = diagnostics_context_provider
128
286
 
129
287
  # Connection retry settings (100ms delay between retries)
130
288
  self._max_connect_retries = max_connect_retries
@@ -142,6 +300,7 @@ class DeepgramSTTService(STTService):
142
300
  verbose=logging.ERROR, # Enable error level and above logging
143
301
  ),
144
302
  )
303
+ self._connect_host, self._connect_port = _derive_connect_endpoint(base_url)
145
304
 
146
305
  if self.vad_enabled:
147
306
  self._register_event_handler("on_speech_started")
@@ -230,7 +389,10 @@ class DeepgramSTTService(STTService):
230
389
  async def _connect(self):
231
390
  self.logger.debug("Attempting to connect to Deepgram...")
232
391
 
392
+ loop = asyncio.get_running_loop()
233
393
  for attempt in range(self._max_connect_retries):
394
+ attempt_started = time.perf_counter()
395
+ dns_ms = await self._measure_dns_resolution(loop)
234
396
  try:
235
397
  # Clean up any previous connection attempt in background (non-blocking)
236
398
  if hasattr(self, "_connection") and self._connection is not None:
@@ -266,18 +428,67 @@ class DeepgramSTTService(STTService):
266
428
  timeout=self._connect_timeout_s,
267
429
  )
268
430
  except asyncio.TimeoutError:
431
+ elapsed_ms = round((time.perf_counter() - attempt_started) * 1000, 2)
432
+ diagnostics = _collect_runtime_diagnostics(
433
+ loop,
434
+ extra_context={
435
+ "dns_ms": dns_ms,
436
+ "connect_duration_ms": elapsed_ms,
437
+ },
438
+ context_provider=self._diagnostics_context_provider,
439
+ )
269
440
  self.logger.warning(
270
- f"Deepgram connection attempt {attempt + 1}/{self._max_connect_retries} timed out after {self._connect_timeout_s} second(s)."
441
+ (
442
+ "Deepgram connection attempt {}/{} timed out after {:.2f} second(s). "
443
+ "runtime_diagnostics={}"
444
+ ),
445
+ attempt + 1,
446
+ self._max_connect_retries,
447
+ self._connect_timeout_s,
448
+ diagnostics,
271
449
  )
272
450
  start_result = False
273
451
  except Exception as start_error:
452
+ elapsed_ms = round((time.perf_counter() - attempt_started) * 1000, 2)
453
+ diagnostics = _collect_runtime_diagnostics(
454
+ loop,
455
+ extra_context={
456
+ "dns_ms": dns_ms,
457
+ "connect_duration_ms": elapsed_ms,
458
+ },
459
+ context_provider=self._diagnostics_context_provider,
460
+ )
274
461
  self.logger.warning(
275
- f"Deepgram connection attempt {attempt + 1}/{self._max_connect_retries} failed with an exception: {start_error}"
462
+ (
463
+ "Deepgram connection attempt {}/{} failed with an exception: {}. "
464
+ "runtime_diagnostics={}"
465
+ ),
466
+ attempt + 1,
467
+ self._max_connect_retries,
468
+ start_error,
469
+ diagnostics,
276
470
  )
277
471
  start_result = False
278
472
  else:
279
473
  if start_result:
280
- self.logger.info("Successfully connected to Deepgram.")
474
+ elapsed_ms = round((time.perf_counter() - attempt_started) * 1000, 2)
475
+ diagnostics = _collect_runtime_diagnostics(
476
+ loop,
477
+ extra_context={
478
+ "dns_ms": dns_ms,
479
+ "connect_duration_ms": elapsed_ms,
480
+ },
481
+ context_provider=self._diagnostics_context_provider,
482
+ )
483
+ self.logger.info(
484
+ (
485
+ "Successfully connected to Deepgram on attempt {} in {:.2f} ms. "
486
+ "runtime_diagnostics={}"
487
+ ),
488
+ attempt + 1,
489
+ elapsed_ms,
490
+ diagnostics,
491
+ )
281
492
  return # Exit the method on success
282
493
 
283
494
  self.logger.warning(
@@ -285,8 +496,24 @@ class DeepgramSTTService(STTService):
285
496
  )
286
497
 
287
498
  except Exception as e:
499
+ elapsed_ms = round((time.perf_counter() - attempt_started) * 1000, 2)
500
+ diagnostics = _collect_runtime_diagnostics(
501
+ loop,
502
+ extra_context={
503
+ "dns_ms": dns_ms,
504
+ "connect_duration_ms": elapsed_ms,
505
+ },
506
+ context_provider=self._diagnostics_context_provider,
507
+ )
288
508
  self.logger.warning(
289
- f"Deepgram connection attempt {attempt + 1}/{self._max_connect_retries} failed with an exception: {e}"
509
+ (
510
+ "Deepgram connection attempt {}/{} failed with an exception: {}. "
511
+ "runtime_diagnostics={}"
512
+ ),
513
+ attempt + 1,
514
+ self._max_connect_retries,
515
+ e,
516
+ diagnostics,
290
517
  )
291
518
 
292
519
  # If this is not the last attempt, wait 100ms before retrying
@@ -300,6 +527,22 @@ class DeepgramSTTService(STTService):
300
527
  self.logger.error(error_msg)
301
528
  await self.push_error(ErrorFrame(error_msg, fatal=True))
302
529
 
530
+ async def _measure_dns_resolution(self, loop: Optional[asyncio.AbstractEventLoop]):
531
+ if not loop or not self._connect_host:
532
+ return None
533
+ try:
534
+ dns_task = loop.getaddrinfo(
535
+ self._connect_host,
536
+ self._connect_port,
537
+ type=socket.SOCK_STREAM,
538
+ proto=socket.IPPROTO_TCP,
539
+ )
540
+ start = time.perf_counter()
541
+ await asyncio.wait_for(dns_task, timeout=1.0)
542
+ return round((time.perf_counter() - start) * 1000, 2)
543
+ except Exception:
544
+ return None
545
+
303
546
  async def _disconnect(self):
304
547
  # Guard against missing connection instance and ensure proper async check
305
548
  connection: AsyncListenWebSocketClient = getattr(self, "_connection", None)
@@ -159,10 +159,16 @@ def language_to_elevenlabs_language(language: Language) -> Optional[str]:
159
159
  result = BASE_LANGUAGES.get(language)
160
160
 
161
161
  # If not found in base languages, try to find the base language from a variant
162
+ # For example, Language.EN_US (value "en-US") -> Language("en") -> "eng"
162
163
  if not result:
163
164
  lang_str = str(language.value)
164
- base_code = lang_str.split("-")[0].lower()
165
- result = base_code if base_code in BASE_LANGUAGES.values() else None
165
+ base_code = lang_str.split("-")[0] # Get "en" from "en-US"
166
+ try:
167
+ base_language = Language(base_code)
168
+ result = BASE_LANGUAGES.get(base_language)
169
+ except (ValueError, KeyError):
170
+ # If base language not found in Language enum, return None
171
+ result = None
166
172
 
167
173
  return result
168
174
 
@@ -425,6 +431,7 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
425
431
  self._pending_final_task: Optional[asyncio.Task] = None
426
432
  self._timestamp_merge_delay_s = 0.25
427
433
  self._ttfb_started = False
434
+ self._waiting_for_timestamps = False
428
435
 
429
436
  @property
430
437
  def commit_strategy(self) -> str:
@@ -474,7 +481,9 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
474
481
  if isinstance(frame, UserStartedSpeakingFrame):
475
482
  if frame.emulated:
476
483
  return
477
- self._ttfb_started = False
484
+ # Start metrics and set flag to True so we can stop them later
485
+ await self.start_ttfb_metrics()
486
+ self._ttfb_started = True
478
487
  await self.start_processing_metrics()
479
488
  elif isinstance(frame, UserStoppedSpeakingFrame):
480
489
  if frame.emulated:
@@ -488,18 +497,28 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
488
497
  yield None
489
498
  return
490
499
 
491
- await self._ensure_connection()
500
+ if not await self._ensure_connection():
501
+ self.logger.error(f"{self} failed to establish connection, dropping audio")
502
+ yield None
503
+ return
504
+
492
505
  await self._send_audio_chunk(audio)
493
506
  yield None
494
507
 
495
- async def _ensure_connection(self):
508
+ async def _ensure_connection(self) -> bool:
509
+ """Ensure WebSocket connection is established and ready.
510
+
511
+ Returns:
512
+ bool: True if connection is ready, False otherwise.
513
+ """
496
514
  if not self._websocket or self._websocket.state is State.CLOSED:
497
515
  await self._connect()
516
+ return self._websocket is not None and self._websocket.state is State.OPEN
498
517
 
499
518
  async def _connect(self):
500
519
  await self._connect_websocket()
501
- if self._websocket and not self._receive_task:
502
- self._receive_task = asyncio.create_task(self._receive_task_handler(self._report_error))
520
+ if self._websocket and self._websocket.state is State.OPEN and not self._receive_task:
521
+ self._receive_task = self.create_task(self._receive_task_handler(self._report_error))
503
522
 
504
523
  async def _disconnect(self):
505
524
  if self._receive_task:
@@ -512,23 +531,30 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
512
531
  async def _connect_websocket(self):
513
532
  try:
514
533
  if self._websocket and self._websocket.state is State.OPEN:
534
+ self.logger.debug(f"{self} already connected, skipping reconnection")
515
535
  return
516
536
 
517
537
  ws_url = self._build_websocket_url()
518
538
  headers = {"xi-api-key": self._api_key}
519
- self.logger.debug(f"Connecting to ElevenLabs realtime STT at {ws_url}")
539
+ self.logger.info(f"{self} connecting to ElevenLabs realtime STT (WebSocket URL built)")
520
540
  self._websocket = await websocket_connect(ws_url, additional_headers=headers)
541
+ self.logger.info(f"{self} successfully connected to ElevenLabs realtime STT")
521
542
  await self._call_event_handler("on_connected")
522
543
  except Exception as e:
523
544
  self.logger.error(f"{self} unable to connect to ElevenLabs realtime STT: {e}")
524
545
  self._websocket = None
546
+ if self._receive_task:
547
+ await self.cancel_task(self._receive_task)
548
+ self._receive_task = None
549
+ # Push error to pipeline so callers know the connection failed
550
+ await self.push_error(ErrorFrame(f"ElevenLabs connection failed: {e}", fatal=False))
525
551
  await self._call_event_handler("on_connection_error", f"{e}")
526
552
 
527
553
  async def _disconnect_websocket(self):
528
554
  try:
529
555
  await self.stop_all_metrics()
530
556
  if self._websocket and self._websocket.state is State.OPEN:
531
- self.logger.debug("Disconnecting from ElevenLabs realtime STT")
557
+ self.logger.debug(f"{self} disconnecting from ElevenLabs realtime STT")
532
558
  await self._websocket.close()
533
559
  except Exception as e:
534
560
  self.logger.error(f"{self} error closing ElevenLabs realtime websocket: {e}")
@@ -573,6 +599,10 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
573
599
  }:
574
600
  fatal = message_type in {"auth_error", "quota_exceeded", "error"}
575
601
  description = data.get("error", data)
602
+ # Log full error details for debugging
603
+ self.logger.error(
604
+ f"{self} ElevenLabs error - Type: {message_type}, Fatal: {fatal}, Full data: {data}"
605
+ )
576
606
  await self.push_error(
577
607
  ErrorFrame(f"ElevenLabs realtime error: {description}", fatal=fatal)
578
608
  )
@@ -588,7 +618,11 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
588
618
  elevenlabs_language_code_to_language(data.get("language_code"))
589
619
  or self._language_override
590
620
  )
591
- await self.stop_ttfb_metrics()
621
+
622
+ # Only stop TTFB metrics on first partial
623
+ if self._ttfb_started:
624
+ await self.stop_ttfb_metrics()
625
+ self._ttfb_started = False
592
626
 
593
627
  await self.push_frame(
594
628
  InterimTranscriptionFrame(
@@ -604,8 +638,10 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
604
638
  if self._pending_final_message:
605
639
  await self._emit_transcription(self._pending_final_message)
606
640
  self._pending_final_message = None
641
+ self._waiting_for_timestamps = False
607
642
 
608
643
  self._pending_final_message = data
644
+ self._waiting_for_timestamps = True
609
645
  await self._schedule_pending_final_emit()
610
646
 
611
647
  async def _handle_committed_transcript_with_timestamps(self, data: Dict[str, Any]):
@@ -613,12 +649,16 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
613
649
  merged = {**self._pending_final_message, **data}
614
650
  await self._emit_transcription(merged)
615
651
  await self._clear_pending_final()
652
+ elif self._waiting_for_timestamps:
653
+ # Late arrival after timeout - don't emit duplicate
654
+ self.logger.warning(f"{self} timestamps arrived after timeout, skipping duplicate")
655
+ self._waiting_for_timestamps = False
616
656
  else:
617
657
  await self._emit_transcription(data)
618
658
 
619
659
  async def _schedule_pending_final_emit(self):
620
660
  await self._clear_pending_final(timer_only=True)
621
- self._pending_final_task = asyncio.create_task(self._emit_pending_after_delay())
661
+ self._pending_final_task = self.create_task(self._emit_pending_after_delay())
622
662
 
623
663
  async def _emit_pending_after_delay(self):
624
664
  try:
@@ -626,6 +666,7 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
626
666
  if self._pending_final_message:
627
667
  await self._emit_transcription(self._pending_final_message)
628
668
  self._pending_final_message = None
669
+ self._waiting_for_timestamps = False
629
670
  except asyncio.CancelledError:
630
671
  pass
631
672
  finally:
@@ -638,6 +679,7 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
638
679
 
639
680
  if not timer_only:
640
681
  self._pending_final_message = None
682
+ self._waiting_for_timestamps = False
641
683
 
642
684
  async def _emit_transcription(self, data: Dict[str, Any]):
643
685
  text = (data.get("text") or data.get("transcript") or "").strip()
@@ -648,7 +690,11 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
648
690
  elevenlabs_language_code_to_language(data.get("language_code"))
649
691
  or self._language_override
650
692
  )
651
- await self.stop_ttfb_metrics()
693
+
694
+ # TTFB should already be stopped by partial, but guard just in case
695
+ if self._ttfb_started:
696
+ await self.stop_ttfb_metrics()
697
+ self._ttfb_started = False
652
698
 
653
699
  frame = TranscriptionFrame(
654
700
  text,
@@ -666,28 +712,39 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
666
712
  if not audio or not self._websocket:
667
713
  return
668
714
 
669
- if not self._ttfb_started:
670
- await self.start_ttfb_metrics()
671
- self._ttfb_started = True
672
-
673
- payload = {
674
- "message_type": "input_audio_chunk",
675
- "audio_base_64": base64.b64encode(audio).decode("ascii"),
676
- "commit": False,
677
- "sample_rate": self.sample_rate,
678
- }
679
- await self._websocket.send(json.dumps(payload))
715
+ try:
716
+ payload = {
717
+ "message_type": "input_audio_chunk",
718
+ "audio_base_64": base64.b64encode(audio).decode("ascii"),
719
+ "commit": False,
720
+ "sample_rate": self.sample_rate,
721
+ }
722
+ await self._websocket.send(json.dumps(payload))
723
+ except Exception as e:
724
+ self.logger.error(f"{self} error sending audio chunk: {e}")
725
+ await self.push_error(ErrorFrame(f"Failed to send audio: {e}"))
726
+ # Trigger reconnection
727
+ await self._disconnect()
728
+ await self._connect()
680
729
 
681
730
  async def _send_commit(self):
682
731
  if not self._websocket:
683
732
  return
684
- payload = {
685
- "message_type": "input_audio_chunk",
686
- "audio_base_64": "",
687
- "commit": True,
688
- "sample_rate": self.sample_rate,
689
- }
690
- await self._websocket.send(json.dumps(payload))
733
+
734
+ try:
735
+ payload = {
736
+ "message_type": "input_audio_chunk",
737
+ "audio_base_64": "",
738
+ "commit": True,
739
+ "sample_rate": self.sample_rate,
740
+ }
741
+ await self._websocket.send(json.dumps(payload))
742
+ except Exception as e:
743
+ self.logger.error(f"{self} error sending commit: {e}")
744
+ await self.push_error(ErrorFrame(f"Failed to send commit: {e}"))
745
+ # Trigger reconnection
746
+ await self._disconnect()
747
+ await self._connect()
691
748
 
692
749
  def _build_websocket_url(self) -> str:
693
750
  if not self.sample_rate: