dv-pipecat-ai 0.0.85.dev854__tar.gz → 0.0.85.dev857__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 (504) hide show
  1. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/CLAUDE.md +64 -1
  2. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/PKG-INFO +1 -1
  3. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/dv_pipecat_ai.egg-info/PKG-INFO +1 -1
  4. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/dv_pipecat_ai.egg-info/SOURCES.txt +1 -0
  5. dv_pipecat_ai-0.0.85.dev857/src/pipecat/metrics/connection_metrics.py +45 -0
  6. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/frame_processor.py +44 -1
  7. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/metrics/frame_processor_metrics.py +108 -0
  8. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/deepgram/stt.py +10 -0
  9. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/elevenlabs/stt.py +6 -40
  10. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/elevenlabs/tts.py +6 -0
  11. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/google/llm.py +26 -11
  12. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai/base_llm.py +21 -12
  13. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/vistaar/llm.py +6 -0
  14. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transcriptions/language.py +50 -0
  15. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.dockerignore +0 -0
  16. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
  17. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
  18. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
  19. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
  20. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
  21. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
  22. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
  23. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  24. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  25. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/workflows/build.yaml +0 -0
  26. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/workflows/coverage.yaml +0 -0
  27. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/workflows/force_push_to_pypi.yml +0 -0
  28. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/workflows/format.yaml +0 -0
  29. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/workflows/github.yml +0 -0
  30. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/workflows/promote-prod.yml +0 -0
  31. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/workflows/publish.yaml +0 -0
  32. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/workflows/publish_test.yaml +0 -0
  33. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/workflows/python-compatibility.yaml +0 -0
  34. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/workflows/set-traffic-split.yml +0 -0
  35. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/workflows/sync-quickstart.yaml +0 -0
  36. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.github/workflows/tests.yaml +0 -0
  37. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.gitignore +0 -0
  38. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.pre-commit-config.yaml +0 -0
  39. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/.readthedocs.yaml +0 -0
  40. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/CHANGELOG.md +0 -0
  41. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/CHANGELOG.md.template +0 -0
  42. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/COMMUNITY_INTEGRATIONS.md +0 -0
  43. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/CONTRIBUTING.md +0 -0
  44. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/DOCKER_BUILD_OPTIMIZATION_SUMMARY.md +0 -0
  45. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/LICENSE +0 -0
  46. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/MANIFEST.in +0 -0
  47. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/README.md +0 -0
  48. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/SECURITY.md +0 -0
  49. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/ansible.cfg +0 -0
  50. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/ansible_deployment.sh +0 -0
  51. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/cleanup_old_containers.yml +0 -0
  52. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/codecov.yml +0 -0
  53. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/create-new-machine/ansible.cfg +0 -0
  54. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/create-new-machine/ansible_setup.sh +0 -0
  55. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/create-new-machine/inventory.ini +0 -0
  56. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/create-new-machine/replace_env.yml +0 -0
  57. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/create-new-machine/setup_playbook.yml +0 -0
  58. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/create_inventory.py +0 -0
  59. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/delete_old_dockers.sh +0 -0
  60. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/deploy.sh +0 -0
  61. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/deploy_playbook.yml +0 -0
  62. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/docker-compose.dev.yml +0 -0
  63. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/dump_logs.yml +0 -0
  64. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/env.example +0 -0
  65. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/fetch_logs.yml +0 -0
  66. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/inventory.ini +0 -0
  67. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/.helmignore +0 -0
  68. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/Chart.yaml +0 -0
  69. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
  70. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
  71. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/templates/cluster-role.yaml +0 -0
  72. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
  73. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
  74. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
  75. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/templates/keda-api-key-secret.yaml +0 -0
  76. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/templates/keda-scaledobject.yaml +0 -0
  77. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/templates/keda-trigger-auth.yaml +0 -0
  78. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/templates/pdb.yaml +0 -0
  79. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/templates/service.yaml +0 -0
  80. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/values-canary.yaml +0 -0
  81. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/values-prod.yaml +0 -0
  82. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/values-stage.yaml +0 -0
  83. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/dv-pipecat/values.yaml +0 -0
  84. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/k8s/istio/destination-virtualservice.yaml +0 -0
  85. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/merge-code-into-single-file.sh +0 -0
  86. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/pipecat.png +0 -0
  87. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/pyproject.toml +0 -0
  88. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/restart.sh +0 -0
  89. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/restart_playbook.yml +0 -0
  90. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/setup.cfg +0 -0
  91. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
  92. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/dv_pipecat_ai.egg-info/requires.txt +0 -0
  93. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
  94. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/__init__.py +0 -0
  95. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/adapters/__init__.py +0 -0
  96. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/adapters/base_llm_adapter.py +0 -0
  97. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/adapters/schemas/__init__.py +0 -0
  98. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/adapters/schemas/direct_function.py +0 -0
  99. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/adapters/schemas/function_schema.py +0 -0
  100. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
  101. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/adapters/services/__init__.py +0 -0
  102. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
  103. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
  104. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
  105. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
  106. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
  107. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
  108. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/__init__.py +0 -0
  109. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/dtmf/__init__.py +0 -0
  110. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/dtmf/dtmf-0.wav +0 -0
  111. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/dtmf/dtmf-1.wav +0 -0
  112. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/dtmf/dtmf-2.wav +0 -0
  113. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/dtmf/dtmf-3.wav +0 -0
  114. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/dtmf/dtmf-4.wav +0 -0
  115. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/dtmf/dtmf-5.wav +0 -0
  116. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/dtmf/dtmf-6.wav +0 -0
  117. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/dtmf/dtmf-7.wav +0 -0
  118. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/dtmf/dtmf-8.wav +0 -0
  119. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/dtmf/dtmf-9.wav +0 -0
  120. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/dtmf/dtmf-pound.wav +0 -0
  121. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/dtmf/dtmf-star.wav +0 -0
  122. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/dtmf/types.py +0 -0
  123. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/dtmf/utils.py +0 -0
  124. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/filters/__init__.py +0 -0
  125. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/filters/aic_filter.py +0 -0
  126. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
  127. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/filters/koala_filter.py +0 -0
  128. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/filters/krisp_filter.py +0 -0
  129. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/filters/krisp_viva_filter.py +0 -0
  130. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
  131. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/filters/pyrnn_local_filter.py +0 -0
  132. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/interruptions/__init__.py +0 -0
  133. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
  134. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
  135. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/mixers/__init__.py +0 -0
  136. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
  137. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
  138. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/resamplers/__init__.py +0 -0
  139. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
  140. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
  141. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
  142. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/resamplers/soxr_stream_resampler.py +0 -0
  143. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/turn/__init__.py +0 -0
  144. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
  145. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
  146. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
  147. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/turn/smart_turn/data/__init__.py +0 -0
  148. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/turn/smart_turn/data/smart-turn-v3.0.onnx +0 -0
  149. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
  150. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
  151. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
  152. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
  153. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v2.py +0 -0
  154. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v3.py +0 -0
  155. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/utils.py +0 -0
  156. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/vad/__init__.py +0 -0
  157. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/vad/data/README.md +0 -0
  158. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/vad/data/__init__.py +0 -0
  159. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
  160. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/vad/data/silero_vad_v2.onnx +0 -0
  161. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/vad/silero.py +0 -0
  162. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
  163. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/clocks/__init__.py +0 -0
  164. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/clocks/base_clock.py +0 -0
  165. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/clocks/system_clock.py +0 -0
  166. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/extensions/__init__.py +0 -0
  167. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/extensions/ivr/__init__.py +0 -0
  168. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/extensions/ivr/ivr_navigator.py +0 -0
  169. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/extensions/voicemail/__init__.py +0 -0
  170. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/extensions/voicemail/voicemail_detector.py +0 -0
  171. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/frames/__init__.py +0 -0
  172. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/frames/frames.proto +0 -0
  173. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/frames/frames.py +0 -0
  174. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
  175. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/metrics/__init__.py +0 -0
  176. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/metrics/metrics.py +0 -0
  177. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/observers/__init__.py +0 -0
  178. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/observers/base_observer.py +0 -0
  179. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/observers/loggers/__init__.py +0 -0
  180. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
  181. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
  182. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
  183. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
  184. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/observers/turn_tracking_observer.py +0 -0
  185. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/pipeline/__init__.py +0 -0
  186. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/pipeline/base_pipeline.py +0 -0
  187. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/pipeline/base_task.py +0 -0
  188. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/pipeline/llm_switcher.py +0 -0
  189. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
  190. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/pipeline/pipeline.py +0 -0
  191. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/pipeline/runner.py +0 -0
  192. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/pipeline/service_switcher.py +0 -0
  193. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
  194. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/pipeline/task.py +0 -0
  195. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/pipeline/task_observer.py +0 -0
  196. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
  197. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/pipeline/tts_switcher.py +0 -0
  198. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/__init__.py +0 -0
  199. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/aggregators/__init__.py +0 -0
  200. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/aggregators/dtmf_aggregator.py +0 -0
  201. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/aggregators/gated.py +0 -0
  202. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/aggregators/gated_llm_context.py +0 -0
  203. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/aggregators/gated_open_ai_llm_context.py +0 -0
  204. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/aggregators/llm_context.py +0 -0
  205. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/aggregators/llm_response.py +0 -0
  206. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/aggregators/llm_response_universal.py +0 -0
  207. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
  208. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/aggregators/sentence.py +0 -0
  209. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/aggregators/user_response.py +0 -0
  210. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
  211. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/async_generator.py +0 -0
  212. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/audio/__init__.py +0 -0
  213. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
  214. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/consumer_processor.py +0 -0
  215. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/dtmf_aggregator.py +0 -0
  216. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/filters/__init__.py +0 -0
  217. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/filters/frame_filter.py +0 -0
  218. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/filters/function_filter.py +0 -0
  219. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/filters/identity_filter.py +0 -0
  220. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/filters/null_filter.py +0 -0
  221. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
  222. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
  223. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
  224. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/frameworks/__init__.py +0 -0
  225. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/frameworks/langchain.py +0 -0
  226. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/frameworks/rtvi.py +0 -0
  227. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/frameworks/strands_agents.py +0 -0
  228. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/gstreamer/__init__.py +0 -0
  229. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
  230. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/idle_frame_processor.py +0 -0
  231. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/logger.py +0 -0
  232. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/metrics/__init__.py +0 -0
  233. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/metrics/sentry.py +0 -0
  234. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/producer_processor.py +0 -0
  235. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/text_transformer.py +0 -0
  236. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/transcript_processor.py +0 -0
  237. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
  238. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/processors/user_idle_processor.py +0 -0
  239. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/py.typed +0 -0
  240. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/runner/__init__.py +0 -0
  241. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/runner/daily.py +0 -0
  242. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/runner/livekit.py +0 -0
  243. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/runner/run.py +0 -0
  244. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/runner/types.py +0 -0
  245. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/runner/utils.py +0 -0
  246. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/serializers/__init__.py +0 -0
  247. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/serializers/asterisk.py +0 -0
  248. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/serializers/base_serializer.py +0 -0
  249. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/serializers/convox.py +0 -0
  250. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/serializers/custom.py +0 -0
  251. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/serializers/exotel.py +0 -0
  252. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/serializers/livekit.py +0 -0
  253. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/serializers/plivo.py +0 -0
  254. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/serializers/protobuf.py +0 -0
  255. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/serializers/telnyx.py +0 -0
  256. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/serializers/twilio.py +0 -0
  257. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/serializers/vi.py +0 -0
  258. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/__init__.py +0 -0
  259. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/ai_service.py +0 -0
  260. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/ai_services.py +0 -0
  261. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/anthropic/__init__.py +0 -0
  262. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/anthropic/llm.py +0 -0
  263. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/assemblyai/__init__.py +0 -0
  264. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/assemblyai/models.py +0 -0
  265. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/assemblyai/stt.py +0 -0
  266. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/asyncai/__init__.py +0 -0
  267. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/asyncai/tts.py +0 -0
  268. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/aws/__init__.py +0 -0
  269. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/aws/llm.py +0 -0
  270. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/aws/nova_sonic/__init__.py +0 -0
  271. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/aws/nova_sonic/context.py +0 -0
  272. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/aws/nova_sonic/frames.py +0 -0
  273. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/aws/nova_sonic/llm.py +0 -0
  274. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/aws/nova_sonic/ready.wav +0 -0
  275. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/aws/stt.py +0 -0
  276. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/aws/tts.py +0 -0
  277. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/aws/utils.py +0 -0
  278. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
  279. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
  280. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
  281. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
  282. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/azure/__init__.py +0 -0
  283. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/azure/common.py +0 -0
  284. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/azure/image.py +0 -0
  285. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/azure/llm.py +0 -0
  286. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/azure/realtime/__init__.py +0 -0
  287. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/azure/realtime/llm.py +0 -0
  288. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/azure/stt.py +0 -0
  289. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/azure/tts.py +0 -0
  290. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/cartesia/__init__.py +0 -0
  291. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/cartesia/stt.py +0 -0
  292. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/cartesia/tts.py +0 -0
  293. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/cerebras/__init__.py +0 -0
  294. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/cerebras/llm.py +0 -0
  295. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/deepgram/__init__.py +0 -0
  296. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/deepgram/flux/__init__.py +0 -0
  297. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/deepgram/flux/stt.py +0 -0
  298. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/deepgram/tts.py +0 -0
  299. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/deepseek/__init__.py +0 -0
  300. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/deepseek/llm.py +0 -0
  301. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/elevenlabs/__init__.py +0 -0
  302. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/fal/__init__.py +0 -0
  303. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/fal/image.py +0 -0
  304. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/fal/stt.py +0 -0
  305. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/fireworks/__init__.py +0 -0
  306. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/fireworks/llm.py +0 -0
  307. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/fish/__init__.py +0 -0
  308. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/fish/tts.py +0 -0
  309. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
  310. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
  311. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/gemini_multimodal_live/file_api.py +0 -0
  312. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
  313. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/gladia/__init__.py +0 -0
  314. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/gladia/config.py +0 -0
  315. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/gladia/stt.py +0 -0
  316. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/google/__init__.py +0 -0
  317. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/google/frames.py +0 -0
  318. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/google/gemini_live/__init__.py +0 -0
  319. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/google/gemini_live/file_api.py +0 -0
  320. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/google/gemini_live/llm.py +0 -0
  321. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/google/gemini_live/llm_vertex.py +0 -0
  322. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/google/google.py +0 -0
  323. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/google/image.py +0 -0
  324. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/google/llm_openai.py +0 -0
  325. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/google/llm_vertex.py +0 -0
  326. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/google/rtvi.py +0 -0
  327. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/google/stt.py +0 -0
  328. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/google/tts.py +0 -0
  329. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/grok/__init__.py +0 -0
  330. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/grok/llm.py +0 -0
  331. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/groq/__init__.py +0 -0
  332. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/groq/llm.py +0 -0
  333. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/groq/stt.py +0 -0
  334. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/groq/tts.py +0 -0
  335. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/hamsa/__init__.py +0 -0
  336. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/hamsa/stt.py +0 -0
  337. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/heygen/__init__.py +0 -0
  338. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/heygen/api.py +0 -0
  339. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/heygen/client.py +0 -0
  340. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/heygen/video.py +0 -0
  341. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/hume/__init__.py +0 -0
  342. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/hume/tts.py +0 -0
  343. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/image_service.py +0 -0
  344. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/inworld/__init__.py +0 -0
  345. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/inworld/tts.py +0 -0
  346. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/llm_service.py +0 -0
  347. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/lmnt/__init__.py +0 -0
  348. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/lmnt/tts.py +0 -0
  349. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/mcp_service.py +0 -0
  350. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/mem0/__init__.py +0 -0
  351. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/mem0/memory.py +0 -0
  352. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/minimax/__init__.py +0 -0
  353. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/minimax/tts.py +0 -0
  354. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/mistral/__init__.py +0 -0
  355. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/mistral/llm.py +0 -0
  356. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/moondream/__init__.py +0 -0
  357. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/moondream/vision.py +0 -0
  358. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/neuphonic/__init__.py +0 -0
  359. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/neuphonic/tts.py +0 -0
  360. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/nim/__init__.py +0 -0
  361. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/nim/llm.py +0 -0
  362. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/ollama/__init__.py +0 -0
  363. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/ollama/llm.py +0 -0
  364. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai/__init__.py +0 -0
  365. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai/image.py +0 -0
  366. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai/llm.py +0 -0
  367. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai/realtime/__init__.py +0 -0
  368. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai/realtime/context.py +0 -0
  369. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai/realtime/events.py +0 -0
  370. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai/realtime/frames.py +0 -0
  371. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai/realtime/llm.py +0 -0
  372. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai/stt.py +0 -0
  373. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai/tts.py +0 -0
  374. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai_realtime/__init__.py +0 -0
  375. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai_realtime/azure.py +0 -0
  376. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai_realtime/context.py +0 -0
  377. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai_realtime/events.py +0 -0
  378. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai_realtime/frames.py +0 -0
  379. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
  380. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
  381. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
  382. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
  383. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
  384. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
  385. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openpipe/__init__.py +0 -0
  386. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openpipe/llm.py +0 -0
  387. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openrouter/__init__.py +0 -0
  388. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/openrouter/llm.py +0 -0
  389. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/perplexity/__init__.py +0 -0
  390. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/perplexity/llm.py +0 -0
  391. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/piper/__init__.py +0 -0
  392. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/piper/tts.py +0 -0
  393. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/playht/__init__.py +0 -0
  394. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/playht/tts.py +0 -0
  395. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/qwen/__init__.py +0 -0
  396. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/qwen/llm.py +0 -0
  397. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/rime/__init__.py +0 -0
  398. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/rime/tts.py +0 -0
  399. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/riva/__init__.py +0 -0
  400. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/riva/stt.py +0 -0
  401. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/riva/tts.py +0 -0
  402. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/salesforce/__init__.py +0 -0
  403. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/salesforce/llm.py +0 -0
  404. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/sambanova/__init__.py +0 -0
  405. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/sambanova/llm.py +0 -0
  406. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/sambanova/stt.py +0 -0
  407. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/sarvam/__init__.py +0 -0
  408. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/sarvam/stt.py +0 -0
  409. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/sarvam/tts.py +0 -0
  410. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/simli/__init__.py +0 -0
  411. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/simli/video.py +0 -0
  412. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/soniox/__init__.py +0 -0
  413. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/soniox/stt.py +0 -0
  414. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/speechmatics/__init__.py +0 -0
  415. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/speechmatics/stt.py +0 -0
  416. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/stt_service.py +0 -0
  417. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/tavus/__init__.py +0 -0
  418. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/tavus/video.py +0 -0
  419. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/together/__init__.py +0 -0
  420. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/together/llm.py +0 -0
  421. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/tts_service.py +0 -0
  422. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/ultravox/__init__.py +0 -0
  423. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/ultravox/stt.py +0 -0
  424. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/vision_service.py +0 -0
  425. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/vistaar/__init__.py +0 -0
  426. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/websocket_service.py +0 -0
  427. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/whisper/__init__.py +0 -0
  428. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/whisper/base_stt.py +0 -0
  429. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/whisper/stt.py +0 -0
  430. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/xtts/__init__.py +0 -0
  431. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/services/xtts/tts.py +0 -0
  432. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/sync/__init__.py +0 -0
  433. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/sync/base_notifier.py +0 -0
  434. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/sync/event_notifier.py +0 -0
  435. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/tests/__init__.py +0 -0
  436. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/tests/utils.py +0 -0
  437. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transcriptions/__init__.py +0 -0
  438. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/__init__.py +0 -0
  439. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/base_input.py +0 -0
  440. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/base_output.py +0 -0
  441. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/base_transport.py +0 -0
  442. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/daily/__init__.py +0 -0
  443. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/daily/transport.py +0 -0
  444. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/daily/utils.py +0 -0
  445. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/heygen/__init__.py +0 -0
  446. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/heygen/transport.py +0 -0
  447. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/livekit/__init__.py +0 -0
  448. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/livekit/transport.py +0 -0
  449. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/local/__init__.py +0 -0
  450. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/local/audio.py +0 -0
  451. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/local/tk.py +0 -0
  452. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/network/__init__.py +0 -0
  453. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/network/fastapi_websocket.py +0 -0
  454. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/network/small_webrtc.py +0 -0
  455. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/network/webrtc_connection.py +0 -0
  456. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/network/websocket_client.py +0 -0
  457. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/network/websocket_server.py +0 -0
  458. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/services/__init__.py +0 -0
  459. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/services/daily.py +0 -0
  460. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/services/helpers/__init__.py +0 -0
  461. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
  462. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/services/livekit.py +0 -0
  463. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/services/tavus.py +0 -0
  464. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/smallwebrtc/__init__.py +0 -0
  465. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/smallwebrtc/connection.py +0 -0
  466. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/smallwebrtc/request_handler.py +0 -0
  467. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/smallwebrtc/transport.py +0 -0
  468. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/tavus/__init__.py +0 -0
  469. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/tavus/transport.py +0 -0
  470. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/websocket/__init__.py +0 -0
  471. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/websocket/client.py +0 -0
  472. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/websocket/fastapi.py +0 -0
  473. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/websocket/server.py +0 -0
  474. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/whatsapp/__init__.py +0 -0
  475. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/whatsapp/api.py +0 -0
  476. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/transports/whatsapp/client.py +0 -0
  477. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/__init__.py +0 -0
  478. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/asyncio/__init__.py +0 -0
  479. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/asyncio/task_manager.py +0 -0
  480. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/base_object.py +0 -0
  481. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/logger_config.py +0 -0
  482. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/network.py +0 -0
  483. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/redis.py +0 -0
  484. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/string.py +0 -0
  485. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/text/__init__.py +0 -0
  486. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
  487. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/text/base_text_filter.py +0 -0
  488. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
  489. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
  490. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
  491. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
  492. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/time.py +0 -0
  493. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/tracing/__init__.py +0 -0
  494. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/tracing/class_decorators.py +0 -0
  495. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
  496. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/tracing/service_attributes.py +0 -0
  497. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/tracing/service_decorators.py +0 -0
  498. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/tracing/setup.py +0 -0
  499. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
  500. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
  501. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/src/pipecat/utils/utils.py +0 -0
  502. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/stop_container.yml +0 -0
  503. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/test_elevenlabs_stt_segmented.py +0 -0
  504. {dv_pipecat_ai-0.0.85.dev854 → dv_pipecat_ai-0.0.85.dev857}/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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.85.dev854
3
+ Version: 0.0.85.dev857
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.dev854
3
+ Version: 0.0.85.dev857
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
@@ -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
@@ -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
+
@@ -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):
@@ -34,7 +34,7 @@ from pipecat.frames.frames import (
34
34
  )
35
35
  from pipecat.processors.frame_processor import FrameDirection
36
36
  from pipecat.services.stt_service import SegmentedSTTService, WebsocketSTTService
37
- from pipecat.transcriptions.language import Language
37
+ from pipecat.transcriptions.language import Language, resolve_language
38
38
  from pipecat.utils.time import time_now_iso8601
39
39
  from pipecat.utils.tracing.service_decorators import traced_stt
40
40
 
@@ -61,7 +61,7 @@ def language_to_elevenlabs_language(language: Language) -> Optional[str]:
61
61
  Returns:
62
62
  The corresponding ElevenLabs language code, or None if not supported.
63
63
  """
64
- BASE_LANGUAGES = {
64
+ LANGUAGE_MAP = {
65
65
  Language.AF: "afr", # Afrikaans
66
66
  Language.AM: "amh", # Amharic
67
67
  Language.AR: "ara", # Arabic
@@ -163,21 +163,7 @@ def language_to_elevenlabs_language(language: Language) -> Optional[str]:
163
163
  Language.ZU: "zul", # Zulu
164
164
  }
165
165
 
166
- result = BASE_LANGUAGES.get(language)
167
-
168
- # If not found in base languages, try to find the base language from a variant
169
- # For example, Language.EN_US (value "en-US") -> Language("en") -> "eng"
170
- if not result:
171
- lang_str = str(language.value)
172
- base_code = lang_str.split("-")[0] # Get "en" from "en-US"
173
- try:
174
- base_language = Language(base_code)
175
- result = BASE_LANGUAGES.get(base_language)
176
- except (ValueError, KeyError):
177
- # If base language not found in Language enum, return None
178
- result = None
179
-
180
- return result
166
+ return resolve_language(language, LANGUAGE_MAP, use_base_code=False)
181
167
 
182
168
 
183
169
  class ElevenLabsSTTService(SegmentedSTTService):
@@ -365,8 +351,8 @@ class ElevenLabsSTTService(SegmentedSTTService):
365
351
  )
366
352
 
367
353
  except Exception as e:
368
- logger.error(f"ElevenLabs STT error: {e}")
369
- yield ErrorFrame(f"ElevenLabs STT error: {str(e)}")
354
+ logger.error(f"{self} exception: {e}")
355
+ yield ErrorFrame(error=f"{self} error: {e}")
370
356
 
371
357
 
372
358
  def audio_format_from_sample_rate(sample_rate: int) -> str:
@@ -414,12 +400,6 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
414
400
 
415
401
  By default, uses manual commit strategy where Pipecat's VAD controls when to
416
402
  commit transcript segments, providing consistency with other STT services.
417
-
418
- Important:
419
- When using manual commit strategy with Pipecat's VAD, it is recommended to set
420
- the VAD `stop_secs` parameter to at least 0.5 seconds. Lower values may result
421
- in incomplete transcriptions due to a known limitation in the ElevenLabs model
422
- where audio sent near the commit boundary may not be fully processed.
423
403
  """
424
404
 
425
405
  class InputParams(BaseModel):
@@ -436,11 +416,6 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
436
416
  Only used when commit_strategy is VAD. None uses ElevenLabs default.
437
417
  min_silence_duration_ms: Minimum silence duration for VAD (50-2000ms).
438
418
  Only used when commit_strategy is VAD. None uses ElevenLabs default.
439
-
440
- Note:
441
- When using manual commit strategy, ensure Pipecat's VAD `stop_secs` is set to
442
- at least 0.5 seconds to avoid incomplete transcriptions. This is a known
443
- limitation of the ElevenLabs model.
444
419
  """
445
420
 
446
421
  language_code: Optional[str] = None
@@ -469,10 +444,6 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
469
444
  sample_rate: Audio sample rate in Hz. If not provided, uses the pipeline's rate.
470
445
  params: Configuration parameters for the STT service.
471
446
  **kwargs: Additional arguments passed to WebsocketSTTService.
472
-
473
- Note:
474
- When using manual commit strategy (default), configure Pipecat's VAD with
475
- `stop_secs` of at least 0.5 seconds to ensure complete transcriptions.
476
447
  """
477
448
  super().__init__(
478
449
  sample_rate=sample_rate,
@@ -746,12 +717,7 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService):
746
717
  logger.error(f"ElevenLabs input error: {error_msg}")
747
718
  await self.push_error(ErrorFrame(f"Input error: {error_msg}"))
748
719
 
749
- elif message_type in [
750
- "auth_error",
751
- "quota_exceeded",
752
- "transcriber_error",
753
- "error",
754
- ]:
720
+ elif message_type in ["auth_error", "quota_exceeded", "transcriber_error", "error"]:
755
721
  error_msg = data.get("error", data.get("message", "Unknown error"))
756
722
  logger.error(f"ElevenLabs error ({message_type}): {error_msg}")
757
723
  await self.push_error(ErrorFrame(f"{message_type}: {error_msg}"))
@@ -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:
@@ -760,12 +760,19 @@ class GoogleLLMService(LLMService):
760
760
 
761
761
  generation_config = GenerateContentConfig(system_instruction=system)
762
762
 
763
- # Use the new google-genai client's async method
764
- response = await self._client.aio.models.generate_content(
765
- model=self._model_name,
766
- contents=messages,
767
- config=generation_config,
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
- return await self._client.aio.models.generate_content_stream(
853
- model=self._model_name,
854
- contents=messages,
855
- config=generation_config,
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
@@ -205,20 +205,29 @@ class BaseOpenAILLMService(LLMService):
205
205
  """
206
206
  params = self.build_chat_completion_params(params_from_context)
207
207
 
208
- if self._retry_on_timeout:
209
- try:
210
- chunks = await asyncio.wait_for(
211
- self._client.chat.completions.create(**params), timeout=self._retry_timeout_secs
212
- )
213
- return chunks
214
- except (APITimeoutError, asyncio.TimeoutError):
215
- # Retry, this time without a timeout so we get a response
216
- logger.debug(f"{self}: Retrying chat completion due to timeout")
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
- else:
220
- chunks = await self._client.chat.completions.create(**params)
221
- return chunks
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.
@@ -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
  )