dv-pipecat-ai 0.0.85.dev865__tar.gz → 0.0.85.dev866__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 (507) hide show
  1. {dv_pipecat_ai-0.0.85.dev865/src/dv_pipecat_ai.egg-info → dv_pipecat_ai-0.0.85.dev866}/PKG-INFO +4 -1
  2. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/pyproject.toml +3 -0
  3. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866/src/dv_pipecat_ai.egg-info}/PKG-INFO +4 -1
  4. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/dv_pipecat_ai.egg-info/SOURCES.txt +2 -0
  5. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/dv_pipecat_ai.egg-info/requires.txt +3 -0
  6. dv_pipecat_ai-0.0.85.dev866/src/pipecat/services/ringg/__init__.py +11 -0
  7. dv_pipecat_ai-0.0.85.dev866/src/pipecat/services/ringg/stt.py +377 -0
  8. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/stt_service.py +0 -1
  9. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/uv.lock +4549 -4505
  10. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.dockerignore +0 -0
  11. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
  12. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
  13. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
  14. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
  15. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
  16. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
  17. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
  18. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  19. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  20. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/build.yaml +0 -0
  21. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/coverage.yaml +0 -0
  22. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/force_push_to_pypi.yml +0 -0
  23. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/format.yaml +0 -0
  24. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/github.yml +0 -0
  25. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/promote-prod.yml +0 -0
  26. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/publish.yaml +0 -0
  27. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/publish_test.yaml +0 -0
  28. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/python-compatibility.yaml +0 -0
  29. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/set-traffic-split.yml +0 -0
  30. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/sync-quickstart.yaml +0 -0
  31. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/tests.yaml +0 -0
  32. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.gitignore +0 -0
  33. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.pre-commit-config.yaml +0 -0
  34. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/.readthedocs.yaml +0 -0
  35. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/CHANGELOG.md +0 -0
  36. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/CHANGELOG.md.template +0 -0
  37. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/CLAUDE.md +0 -0
  38. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/COMMUNITY_INTEGRATIONS.md +0 -0
  39. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/CONTRIBUTING.md +0 -0
  40. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/DOCKER_BUILD_OPTIMIZATION_SUMMARY.md +0 -0
  41. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/LICENSE +0 -0
  42. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/MANIFEST.in +0 -0
  43. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/README.md +0 -0
  44. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/SECURITY.md +0 -0
  45. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/ansible.cfg +0 -0
  46. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/ansible_deployment.sh +0 -0
  47. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/cleanup_old_containers.yml +0 -0
  48. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/codecov.yml +0 -0
  49. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/create-new-machine/ansible.cfg +0 -0
  50. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/create-new-machine/ansible_setup.sh +0 -0
  51. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/create-new-machine/inventory.ini +0 -0
  52. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/create-new-machine/replace_env.yml +0 -0
  53. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/create-new-machine/setup_playbook.yml +0 -0
  54. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/create_inventory.py +0 -0
  55. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/delete_old_dockers.sh +0 -0
  56. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/deploy.sh +0 -0
  57. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/deploy_playbook.yml +0 -0
  58. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/docker-compose.dev.yml +0 -0
  59. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/dump_logs.yml +0 -0
  60. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/env.example +0 -0
  61. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/fetch_logs.yml +0 -0
  62. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/inventory.ini +0 -0
  63. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/.helmignore +0 -0
  64. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/Chart.yaml +0 -0
  65. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
  66. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
  67. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/cluster-role.yaml +0 -0
  68. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
  69. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
  70. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
  71. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/keda-api-key-secret.yaml +0 -0
  72. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/keda-scaledobject.yaml +0 -0
  73. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/keda-trigger-auth.yaml +0 -0
  74. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/pdb.yaml +0 -0
  75. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/service.yaml +0 -0
  76. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/values-canary.yaml +0 -0
  77. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/values-prod.yaml +0 -0
  78. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/values-stage.yaml +0 -0
  79. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/values.yaml +0 -0
  80. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/k8s/istio/destination-virtualservice.yaml +0 -0
  81. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/merge-code-into-single-file.sh +0 -0
  82. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/pipecat.png +0 -0
  83. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/restart.sh +0 -0
  84. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/restart_playbook.yml +0 -0
  85. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/setup.cfg +0 -0
  86. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
  87. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
  88. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/__init__.py +0 -0
  89. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/__init__.py +0 -0
  90. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/base_llm_adapter.py +0 -0
  91. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/schemas/__init__.py +0 -0
  92. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/schemas/direct_function.py +0 -0
  93. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/schemas/function_schema.py +0 -0
  94. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
  95. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/services/__init__.py +0 -0
  96. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
  97. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
  98. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
  99. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
  100. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
  101. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
  102. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/__init__.py +0 -0
  103. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/__init__.py +0 -0
  104. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-0.wav +0 -0
  105. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-1.wav +0 -0
  106. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-2.wav +0 -0
  107. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-3.wav +0 -0
  108. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-4.wav +0 -0
  109. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-5.wav +0 -0
  110. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-6.wav +0 -0
  111. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-7.wav +0 -0
  112. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-8.wav +0 -0
  113. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-9.wav +0 -0
  114. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-pound.wav +0 -0
  115. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-star.wav +0 -0
  116. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/types.py +0 -0
  117. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/utils.py +0 -0
  118. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/__init__.py +0 -0
  119. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/aic_filter.py +0 -0
  120. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
  121. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/koala_filter.py +0 -0
  122. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/krisp_filter.py +0 -0
  123. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/krisp_viva_filter.py +0 -0
  124. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
  125. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/pyrnn_local_filter.py +0 -0
  126. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/interruptions/__init__.py +0 -0
  127. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
  128. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
  129. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/mixers/__init__.py +0 -0
  130. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
  131. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
  132. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/resamplers/__init__.py +0 -0
  133. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
  134. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
  135. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
  136. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/resamplers/soxr_stream_resampler.py +0 -0
  137. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/__init__.py +0 -0
  138. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
  139. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
  140. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
  141. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/data/__init__.py +0 -0
  142. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/data/smart-turn-v3.0.onnx +0 -0
  143. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
  144. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
  145. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
  146. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
  147. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v2.py +0 -0
  148. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v3.py +0 -0
  149. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/utils.py +0 -0
  150. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/vad/__init__.py +0 -0
  151. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/vad/data/README.md +0 -0
  152. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/vad/data/__init__.py +0 -0
  153. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
  154. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/vad/data/silero_vad_v2.onnx +0 -0
  155. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/vad/silero.py +0 -0
  156. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
  157. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/clocks/__init__.py +0 -0
  158. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/clocks/base_clock.py +0 -0
  159. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/clocks/system_clock.py +0 -0
  160. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/extensions/__init__.py +0 -0
  161. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/extensions/ivr/__init__.py +0 -0
  162. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/extensions/ivr/ivr_navigator.py +0 -0
  163. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/extensions/voicemail/__init__.py +0 -0
  164. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/extensions/voicemail/voicemail_detector.py +0 -0
  165. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/frames/__init__.py +0 -0
  166. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/frames/frames.proto +0 -0
  167. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/frames/frames.py +0 -0
  168. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
  169. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/metrics/__init__.py +0 -0
  170. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/metrics/connection_metrics.py +0 -0
  171. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/metrics/metrics.py +0 -0
  172. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/__init__.py +0 -0
  173. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/base_observer.py +0 -0
  174. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/loggers/__init__.py +0 -0
  175. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
  176. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
  177. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
  178. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
  179. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/turn_tracking_observer.py +0 -0
  180. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/__init__.py +0 -0
  181. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/base_pipeline.py +0 -0
  182. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/base_task.py +0 -0
  183. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/llm_switcher.py +0 -0
  184. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
  185. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/pipeline.py +0 -0
  186. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/runner.py +0 -0
  187. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/service_switcher.py +0 -0
  188. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
  189. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/task.py +0 -0
  190. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/task_observer.py +0 -0
  191. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
  192. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/tts_switcher.py +0 -0
  193. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/__init__.py +0 -0
  194. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/__init__.py +0 -0
  195. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/dtmf_aggregator.py +0 -0
  196. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/gated.py +0 -0
  197. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/gated_llm_context.py +0 -0
  198. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/gated_open_ai_llm_context.py +0 -0
  199. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/llm_context.py +0 -0
  200. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/llm_response.py +0 -0
  201. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/llm_response_universal.py +0 -0
  202. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
  203. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/sentence.py +0 -0
  204. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/user_response.py +0 -0
  205. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
  206. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/async_generator.py +0 -0
  207. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/audio/__init__.py +0 -0
  208. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
  209. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/consumer_processor.py +0 -0
  210. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/dtmf_aggregator.py +0 -0
  211. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/__init__.py +0 -0
  212. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/frame_filter.py +0 -0
  213. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/function_filter.py +0 -0
  214. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/identity_filter.py +0 -0
  215. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/null_filter.py +0 -0
  216. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
  217. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
  218. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
  219. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/frame_processor.py +0 -0
  220. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/frameworks/__init__.py +0 -0
  221. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/frameworks/langchain.py +0 -0
  222. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/frameworks/rtvi.py +0 -0
  223. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/frameworks/strands_agents.py +0 -0
  224. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/gstreamer/__init__.py +0 -0
  225. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
  226. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/idle_frame_processor.py +0 -0
  227. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/logger.py +0 -0
  228. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/metrics/__init__.py +0 -0
  229. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/metrics/frame_processor_metrics.py +0 -0
  230. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/metrics/sentry.py +0 -0
  231. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/producer_processor.py +0 -0
  232. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/text_transformer.py +0 -0
  233. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/transcript_processor.py +0 -0
  234. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
  235. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/user_idle_processor.py +0 -0
  236. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/py.typed +0 -0
  237. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/runner/__init__.py +0 -0
  238. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/runner/daily.py +0 -0
  239. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/runner/livekit.py +0 -0
  240. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/runner/run.py +0 -0
  241. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/runner/types.py +0 -0
  242. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/runner/utils.py +0 -0
  243. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/__init__.py +0 -0
  244. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/asterisk.py +0 -0
  245. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/asterisk_chan_websocket_original.py +0 -0
  246. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/base_serializer.py +0 -0
  247. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/convox.py +0 -0
  248. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/custom.py +0 -0
  249. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/exotel.py +0 -0
  250. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/livekit.py +0 -0
  251. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/plivo.py +0 -0
  252. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/protobuf.py +0 -0
  253. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/telnyx.py +0 -0
  254. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/twilio.py +0 -0
  255. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/vi.py +0 -0
  256. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/__init__.py +0 -0
  257. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/ai_service.py +0 -0
  258. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/ai_services.py +0 -0
  259. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/anthropic/__init__.py +0 -0
  260. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/anthropic/llm.py +0 -0
  261. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/assemblyai/__init__.py +0 -0
  262. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/assemblyai/models.py +0 -0
  263. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/assemblyai/stt.py +0 -0
  264. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/asyncai/__init__.py +0 -0
  265. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/asyncai/tts.py +0 -0
  266. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/__init__.py +0 -0
  267. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/llm.py +0 -0
  268. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/nova_sonic/__init__.py +0 -0
  269. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/nova_sonic/context.py +0 -0
  270. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/nova_sonic/frames.py +0 -0
  271. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/nova_sonic/llm.py +0 -0
  272. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/nova_sonic/ready.wav +0 -0
  273. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/stt.py +0 -0
  274. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/tts.py +0 -0
  275. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/utils.py +0 -0
  276. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
  277. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
  278. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
  279. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
  280. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/__init__.py +0 -0
  281. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/common.py +0 -0
  282. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/image.py +0 -0
  283. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/llm.py +0 -0
  284. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/realtime/__init__.py +0 -0
  285. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/realtime/llm.py +0 -0
  286. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/stt.py +0 -0
  287. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/tts.py +0 -0
  288. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/cartesia/__init__.py +0 -0
  289. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/cartesia/stt.py +0 -0
  290. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/cartesia/tts.py +0 -0
  291. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/cerebras/__init__.py +0 -0
  292. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/cerebras/llm.py +0 -0
  293. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/deepgram/__init__.py +0 -0
  294. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/deepgram/flux/__init__.py +0 -0
  295. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/deepgram/flux/stt.py +0 -0
  296. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/deepgram/stt.py +0 -0
  297. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/deepgram/tts.py +0 -0
  298. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/deepseek/__init__.py +0 -0
  299. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/deepseek/llm.py +0 -0
  300. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/elevenlabs/__init__.py +0 -0
  301. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/elevenlabs/stt.py +0 -0
  302. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/elevenlabs/tts.py +0 -0
  303. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/fal/__init__.py +0 -0
  304. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/fal/image.py +0 -0
  305. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/fal/stt.py +0 -0
  306. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/fireworks/__init__.py +0 -0
  307. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/fireworks/llm.py +0 -0
  308. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/fish/__init__.py +0 -0
  309. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/fish/tts.py +0 -0
  310. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
  311. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
  312. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/gemini_multimodal_live/file_api.py +0 -0
  313. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
  314. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/gladia/__init__.py +0 -0
  315. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/gladia/config.py +0 -0
  316. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/gladia/stt.py +0 -0
  317. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/__init__.py +0 -0
  318. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/frames.py +0 -0
  319. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/gemini_live/__init__.py +0 -0
  320. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/gemini_live/file_api.py +0 -0
  321. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/gemini_live/llm.py +0 -0
  322. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/gemini_live/llm_vertex.py +0 -0
  323. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/google.py +0 -0
  324. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/image.py +0 -0
  325. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/llm.py +0 -0
  326. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/llm_openai.py +0 -0
  327. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/llm_vertex.py +0 -0
  328. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/rtvi.py +0 -0
  329. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/stt.py +0 -0
  330. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/tts.py +0 -0
  331. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/grok/__init__.py +0 -0
  332. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/grok/llm.py +0 -0
  333. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/groq/__init__.py +0 -0
  334. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/groq/llm.py +0 -0
  335. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/groq/stt.py +0 -0
  336. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/groq/tts.py +0 -0
  337. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/hamsa/__init__.py +0 -0
  338. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/hamsa/stt.py +0 -0
  339. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/heygen/__init__.py +0 -0
  340. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/heygen/api.py +0 -0
  341. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/heygen/client.py +0 -0
  342. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/heygen/video.py +0 -0
  343. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/hume/__init__.py +0 -0
  344. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/hume/tts.py +0 -0
  345. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/image_service.py +0 -0
  346. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/inworld/__init__.py +0 -0
  347. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/inworld/tts.py +0 -0
  348. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/llm_service.py +0 -0
  349. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/lmnt/__init__.py +0 -0
  350. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/lmnt/tts.py +0 -0
  351. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/mcp_service.py +0 -0
  352. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/mem0/__init__.py +0 -0
  353. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/mem0/memory.py +0 -0
  354. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/minimax/__init__.py +0 -0
  355. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/minimax/tts.py +0 -0
  356. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/mistral/__init__.py +0 -0
  357. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/mistral/llm.py +0 -0
  358. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/moondream/__init__.py +0 -0
  359. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/moondream/vision.py +0 -0
  360. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/neuphonic/__init__.py +0 -0
  361. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/neuphonic/tts.py +0 -0
  362. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/nim/__init__.py +0 -0
  363. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/nim/llm.py +0 -0
  364. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/ollama/__init__.py +0 -0
  365. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/ollama/llm.py +0 -0
  366. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/__init__.py +0 -0
  367. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/base_llm.py +0 -0
  368. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/image.py +0 -0
  369. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/llm.py +0 -0
  370. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/realtime/__init__.py +0 -0
  371. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/realtime/context.py +0 -0
  372. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/realtime/events.py +0 -0
  373. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/realtime/frames.py +0 -0
  374. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/realtime/llm.py +0 -0
  375. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/stt.py +0 -0
  376. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/tts.py +0 -0
  377. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime/__init__.py +0 -0
  378. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime/azure.py +0 -0
  379. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime/context.py +0 -0
  380. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime/events.py +0 -0
  381. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime/frames.py +0 -0
  382. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
  383. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
  384. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
  385. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
  386. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
  387. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
  388. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openpipe/__init__.py +0 -0
  389. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openpipe/llm.py +0 -0
  390. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openrouter/__init__.py +0 -0
  391. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openrouter/llm.py +0 -0
  392. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/perplexity/__init__.py +0 -0
  393. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/perplexity/llm.py +0 -0
  394. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/piper/__init__.py +0 -0
  395. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/piper/tts.py +0 -0
  396. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/playht/__init__.py +0 -0
  397. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/playht/tts.py +0 -0
  398. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/qwen/__init__.py +0 -0
  399. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/qwen/llm.py +0 -0
  400. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/rime/__init__.py +0 -0
  401. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/rime/tts.py +0 -0
  402. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/riva/__init__.py +0 -0
  403. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/riva/stt.py +0 -0
  404. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/riva/tts.py +0 -0
  405. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/salesforce/__init__.py +0 -0
  406. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/salesforce/llm.py +0 -0
  407. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/sambanova/__init__.py +0 -0
  408. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/sambanova/llm.py +0 -0
  409. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/sambanova/stt.py +0 -0
  410. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/sarvam/__init__.py +0 -0
  411. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/sarvam/stt.py +0 -0
  412. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/sarvam/tts.py +0 -0
  413. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/simli/__init__.py +0 -0
  414. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/simli/video.py +0 -0
  415. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/soniox/__init__.py +0 -0
  416. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/soniox/stt.py +0 -0
  417. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/speechmatics/__init__.py +0 -0
  418. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/speechmatics/stt.py +0 -0
  419. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/tavus/__init__.py +0 -0
  420. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/tavus/video.py +0 -0
  421. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/together/__init__.py +0 -0
  422. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/together/llm.py +0 -0
  423. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/tts_service.py +0 -0
  424. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/ultravox/__init__.py +0 -0
  425. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/ultravox/stt.py +0 -0
  426. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/vision_service.py +0 -0
  427. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/vistaar/__init__.py +0 -0
  428. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/vistaar/llm.py +0 -0
  429. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/websocket_service.py +0 -0
  430. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/whisper/__init__.py +0 -0
  431. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/whisper/base_stt.py +0 -0
  432. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/whisper/stt.py +0 -0
  433. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/xtts/__init__.py +0 -0
  434. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/xtts/tts.py +0 -0
  435. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/sync/__init__.py +0 -0
  436. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/sync/base_notifier.py +0 -0
  437. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/sync/event_notifier.py +0 -0
  438. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/tests/__init__.py +0 -0
  439. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/tests/utils.py +0 -0
  440. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transcriptions/__init__.py +0 -0
  441. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transcriptions/language.py +0 -0
  442. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/__init__.py +0 -0
  443. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/base_input.py +0 -0
  444. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/base_output.py +0 -0
  445. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/base_transport.py +0 -0
  446. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/daily/__init__.py +0 -0
  447. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/daily/transport.py +0 -0
  448. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/daily/utils.py +0 -0
  449. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/heygen/__init__.py +0 -0
  450. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/heygen/transport.py +0 -0
  451. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/livekit/__init__.py +0 -0
  452. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/livekit/transport.py +0 -0
  453. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/local/__init__.py +0 -0
  454. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/local/audio.py +0 -0
  455. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/local/tk.py +0 -0
  456. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/network/__init__.py +0 -0
  457. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/network/fastapi_websocket.py +0 -0
  458. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/network/small_webrtc.py +0 -0
  459. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/network/webrtc_connection.py +0 -0
  460. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/network/websocket_client.py +0 -0
  461. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/network/websocket_server.py +0 -0
  462. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/services/__init__.py +0 -0
  463. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/services/daily.py +0 -0
  464. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/services/helpers/__init__.py +0 -0
  465. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
  466. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/services/livekit.py +0 -0
  467. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/services/tavus.py +0 -0
  468. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/smallwebrtc/__init__.py +0 -0
  469. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/smallwebrtc/connection.py +0 -0
  470. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/smallwebrtc/request_handler.py +0 -0
  471. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/smallwebrtc/transport.py +0 -0
  472. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/tavus/__init__.py +0 -0
  473. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/tavus/transport.py +0 -0
  474. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/websocket/__init__.py +0 -0
  475. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/websocket/client.py +0 -0
  476. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/websocket/fastapi.py +0 -0
  477. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/websocket/server.py +0 -0
  478. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/whatsapp/__init__.py +0 -0
  479. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/whatsapp/api.py +0 -0
  480. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/whatsapp/client.py +0 -0
  481. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/__init__.py +0 -0
  482. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/asyncio/__init__.py +0 -0
  483. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/asyncio/task_manager.py +0 -0
  484. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/base_object.py +0 -0
  485. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/logger_config.py +0 -0
  486. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/network.py +0 -0
  487. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/redis.py +0 -0
  488. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/string.py +0 -0
  489. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/text/__init__.py +0 -0
  490. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
  491. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/text/base_text_filter.py +0 -0
  492. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
  493. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
  494. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
  495. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
  496. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/time.py +0 -0
  497. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/__init__.py +0 -0
  498. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/class_decorators.py +0 -0
  499. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
  500. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/service_attributes.py +0 -0
  501. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/service_decorators.py +0 -0
  502. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/setup.py +0 -0
  503. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
  504. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
  505. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/utils.py +0 -0
  506. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/stop_container.yml +0 -0
  507. {dv_pipecat_ai-0.0.85.dev865 → dv_pipecat_ai-0.0.85.dev866}/test_elevenlabs_stt_segmented.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.85.dev865
3
+ Version: 0.0.85.dev866
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
@@ -33,6 +33,9 @@ Requires-Dist: soxr~=0.5.0
33
33
  Requires-Dist: openai<3,>=1.74.0
34
34
  Requires-Dist: numba==0.61.2
35
35
  Requires-Dist: wait_for2>=0.4.1; python_version < "3.12"
36
+ Requires-Dist: boto3>=1.38.27
37
+ Requires-Dist: aioboto3>=15.0.0
38
+ Requires-Dist: redis>=7.1.0
36
39
  Provides-Extra: aic
37
40
  Requires-Dist: aic-sdk~=1.0.1; extra == "aic"
38
41
  Provides-Extra: anthropic
@@ -39,6 +39,9 @@ dependencies = [
39
39
  # Pinning numba to resolve package dependencies
40
40
  "numba==0.61.2",
41
41
  "wait_for2>=0.4.1; python_version<'3.12'",
42
+ "boto3>=1.38.27",
43
+ "aioboto3>=15.0.0",
44
+ "redis>=7.1.0",
42
45
  ]
43
46
 
44
47
  [project.urls]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.85.dev865
3
+ Version: 0.0.85.dev866
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
@@ -33,6 +33,9 @@ Requires-Dist: soxr~=0.5.0
33
33
  Requires-Dist: openai<3,>=1.74.0
34
34
  Requires-Dist: numba==0.61.2
35
35
  Requires-Dist: wait_for2>=0.4.1; python_version < "3.12"
36
+ Requires-Dist: boto3>=1.38.27
37
+ Requires-Dist: aioboto3>=15.0.0
38
+ Requires-Dist: redis>=7.1.0
36
39
  Provides-Extra: aic
37
40
  Requires-Dist: aic-sdk~=1.0.1; extra == "aic"
38
41
  Provides-Extra: anthropic
@@ -400,6 +400,8 @@ src/pipecat/services/qwen/__init__.py
400
400
  src/pipecat/services/qwen/llm.py
401
401
  src/pipecat/services/rime/__init__.py
402
402
  src/pipecat/services/rime/tts.py
403
+ src/pipecat/services/ringg/__init__.py
404
+ src/pipecat/services/ringg/stt.py
403
405
  src/pipecat/services/riva/__init__.py
404
406
  src/pipecat/services/riva/stt.py
405
407
  src/pipecat/services/riva/tts.py
@@ -14,6 +14,9 @@ resampy~=0.4.3
14
14
  soxr~=0.5.0
15
15
  openai<3,>=1.74.0
16
16
  numba==0.61.2
17
+ boto3>=1.38.27
18
+ aioboto3>=15.0.0
19
+ redis>=7.1.0
17
20
 
18
21
  [:python_version < "3.12"]
19
22
  wait_for2>=0.4.1
@@ -0,0 +1,11 @@
1
+ #
2
+ # Copyright (c) 2024–2025, Daily
3
+ #
4
+ # SPDX-License-Identifier: BSD 2-Clause License
5
+ #
6
+
7
+ """Ringg Parrot STT service integration."""
8
+
9
+ from pipecat.services.ringg.stt import RinggParrotSTTService
10
+
11
+ __all__ = ["RinggParrotSTTService"]
@@ -0,0 +1,377 @@
1
+ #
2
+ # Copyright (c) 2024–2025, Daily
3
+ #
4
+ # SPDX-License-Identifier: BSD 2-Clause License
5
+ #
6
+
7
+ """Ringg Parrot speech-to-text service implementation.
8
+
9
+ This service connects to a Ringg Parrot STT WebSocket server for real-time
10
+ transcription. The server provides partial transcripts as audio streams in,
11
+ and final transcripts when explicitly requested via a stop message.
12
+ """
13
+
14
+ import asyncio
15
+ import json
16
+ from typing import AsyncGenerator, Optional
17
+
18
+ from loguru import logger
19
+ from pydantic import BaseModel
20
+
21
+ from pipecat.frames.frames import (
22
+ CancelFrame,
23
+ EndFrame,
24
+ ErrorFrame,
25
+ Frame,
26
+ InterimTranscriptionFrame,
27
+ StartFrame,
28
+ StartInterruptionFrame,
29
+ TranscriptionFrame,
30
+ UserStoppedSpeakingFrame,
31
+ )
32
+ from enum import Enum
33
+ from pipecat.processors.frame_processor import FrameDirection
34
+ from pipecat.services.stt_service import STTService
35
+ from pipecat.utils.time import time_now_iso8601
36
+ from pipecat.utils.tracing.service_decorators import traced_stt
37
+
38
+ try:
39
+ import websockets
40
+ from websockets.asyncio.client import connect as websocket_connect
41
+ from websockets.protocol import State
42
+ except ModuleNotFoundError as e:
43
+ logger.error(f"Exception: {e}")
44
+ logger.error("In order to use Ringg Parrot STT, you need to `pip install websockets`.")
45
+ raise Exception(f"Missing module: {e}")
46
+
47
+
48
+ STOP_MESSAGE = '{"type": "end"}'
49
+
50
+
51
+ class PredictionMethod(str, Enum):
52
+ """Prediction method for Ringg Parrot STT service."""
53
+
54
+ ON_FINAL = "on_final"
55
+
56
+
57
+ class RinggParrotInputParams(BaseModel):
58
+ """Configuration parameters for Ringg Parrot STT service.
59
+
60
+ Parameters:
61
+ encoding: Audio encoding format (default: int16 for PCM signed 16-bit).
62
+ language: Language for transcription (default: Hindi).
63
+ punctuate: Whether to add punctuation to transcriptions.
64
+ partial_chunk_ms: Interval in ms for partial transcription updates.
65
+ """
66
+
67
+ encoding: str = "int16"
68
+ language: str = "hi"
69
+ punctuate: bool = False
70
+ partial_chunk_ms: int = 400
71
+ prediction_method: PredictionMethod = PredictionMethod.ON_FINAL
72
+
73
+
74
+ class RinggParrotSTTService(STTService):
75
+ """Speech-to-Text service using Ringg Parrot's WebSocket API.
76
+
77
+ This service connects to a Ringg Parrot STT WebSocket server for real-time
78
+ transcription. It follows a VAD-forced endpoint pattern where finalization
79
+ is triggered when Pipecat's VAD detects the user stopped speaking.
80
+
81
+ The server:
82
+ - Accepts raw PCM audio frames (16-bit signed, 16kHz)
83
+ - Sends partial transcripts automatically as audio accumulates
84
+ - Sends final transcript when client sends a stop message
85
+
86
+ Example usage::
87
+
88
+ stt = RinggParrotSTTService(
89
+ url="ws://13.234.40.75:7864/v1/audio/stream",
90
+ language="hi",
91
+ )
92
+
93
+ pipeline = Pipeline([
94
+ transport.input(),
95
+ stt,
96
+ context_aggregator.user(),
97
+ llm,
98
+ tts,
99
+ transport.output(),
100
+ ])
101
+ """
102
+
103
+ def __init__(
104
+ self,
105
+ *,
106
+ url: str = "ws://13.234.40.75:8888/v1/audio/stream",
107
+ sample_rate: Optional[int] = 16000,
108
+ params: Optional[RinggParrotInputParams] = None,
109
+ **kwargs,
110
+ ):
111
+ """Initialize the Ringg Parrot STT service.
112
+
113
+ Args:
114
+ url: WebSocket URL for the Ringg Parrot STT server.
115
+ sample_rate: Audio sample rate in Hz (default: 16000).
116
+ params: Additional configuration parameters.
117
+ **kwargs: Additional arguments passed to the STTService.
118
+ """
119
+ super().__init__(sample_rate=sample_rate, **kwargs)
120
+ params = params or RinggParrotInputParams()
121
+
122
+ self._url = url
123
+ self._params = params
124
+ self._websocket = None
125
+ self._receive_task = None
126
+ self._client_id: Optional[str] = None
127
+
128
+ self.set_model_name("ringg-parrot")
129
+
130
+ async def start(self, frame: StartFrame):
131
+ """Start the Ringg Parrot STT websocket connection.
132
+
133
+ Connects to the WebSocket server, sends the start configuration,
134
+ waits for ready confirmation, and starts the receive task.
135
+
136
+ Args:
137
+ frame: The start frame containing initialization parameters.
138
+ """
139
+ await super().start(frame)
140
+ if self._websocket:
141
+ return
142
+
143
+ try:
144
+ self._websocket = await websocket_connect(self._url)
145
+
146
+ if not self._websocket:
147
+ logger.error(f"Unable to connect to Ringg Parrot STT at {self._url}")
148
+ await self._call_event_handler("on_connection_error", "Connection failed")
149
+ return
150
+
151
+ # Send the start configuration message
152
+ start_config = {
153
+ "type": "start",
154
+ "sample_rate": self.sample_rate,
155
+ "encoding": self._params.encoding,
156
+ "language": self._params.language,
157
+ "punctuate": self._params.punctuate,
158
+ "partial_chunk_ms": self._params.partial_chunk_ms,
159
+ "prediction_method": "on_final",
160
+ }
161
+ await self._websocket.send(json.dumps(start_config))
162
+
163
+ # Wait for ready response
164
+ ready_response = await asyncio.wait_for(self._websocket.recv(), timeout=10.0)
165
+ ready_data = json.loads(ready_response)
166
+
167
+ if ready_data.get("type") != "ready":
168
+ error_msg = f"Unexpected response: {ready_data}"
169
+ logger.error(f"Ringg Parrot STT: {error_msg}")
170
+ await self._call_event_handler("on_connection_error", error_msg)
171
+ await self._cleanup()
172
+ return
173
+
174
+ self._client_id = ready_data.get("client_id")
175
+ logger.debug(f"Ringg Parrot STT connected, client_id: {self._client_id}")
176
+
177
+ # Start the receive task
178
+ if self._websocket and not self._receive_task:
179
+ self._receive_task = self.create_task(self._receive_task_handler())
180
+
181
+ await self._call_event_handler("on_connected")
182
+
183
+ except asyncio.TimeoutError:
184
+ logger.error("Ringg Parrot STT: Connection timeout waiting for ready response")
185
+ await self._call_event_handler("on_connection_error", "Connection timeout")
186
+ await self._cleanup()
187
+ except Exception as e:
188
+ logger.error(f"Ringg Parrot STT: Connection error: {e}")
189
+ await self._call_event_handler("on_connection_error", str(e))
190
+ await self._cleanup()
191
+
192
+ async def _cleanup(self):
193
+ """Clean up WebSocket connection and tasks."""
194
+ if self._websocket:
195
+ try:
196
+ await self._websocket.close()
197
+ except Exception:
198
+ pass
199
+ self._websocket = None
200
+
201
+ if self._receive_task:
202
+ # Task cannot cancel itself
203
+ if self._receive_task != asyncio.current_task():
204
+ await self._receive_task
205
+ self._receive_task = None
206
+
207
+ self._client_id = None
208
+ logger.debug("Disconnected from Ringg Parrot STT")
209
+ await self._call_event_handler("on_disconnected")
210
+
211
+ async def stop(self, frame: EndFrame):
212
+ """Stop the Ringg Parrot STT websocket connection.
213
+
214
+ Called when the call/pipeline ends. Closes the connection without
215
+ sending a stop message (final transcripts are triggered by
216
+ UserStoppedSpeakingFrame during the call).
217
+
218
+ Args:
219
+ frame: The end frame.
220
+ """
221
+ await super().stop(frame)
222
+ await self._cleanup()
223
+
224
+ async def cancel(self, frame: CancelFrame):
225
+ """Cancel the Ringg Parrot STT websocket connection immediately.
226
+
227
+ Closes the connection without waiting for final transcript.
228
+
229
+ Args:
230
+ frame: The cancel frame.
231
+ """
232
+ await super().cancel(frame)
233
+ await self._cleanup()
234
+
235
+ async def run_stt(self, audio: bytes) -> AsyncGenerator[Frame, None]:
236
+ """Send audio data to Ringg Parrot STT Service.
237
+
238
+ Audio is sent as raw binary bytes to the WebSocket. The server
239
+ will process and send back transcripts via the receive task.
240
+
241
+ Args:
242
+ audio: Raw audio bytes to transcribe (PCM 16-bit signed).
243
+
244
+ Yields:
245
+ Frame: None (transcription results come via WebSocket callbacks).
246
+ """
247
+ await self.start_processing_metrics()
248
+ if self._websocket and self._websocket.state is State.OPEN:
249
+ try:
250
+ await self._websocket.send(audio)
251
+ except websockets.exceptions.ConnectionClosed:
252
+ logger.warning("Ringg Parrot STT: WebSocket closed while sending audio")
253
+ except Exception as e:
254
+ logger.error(f"Ringg Parrot STT: Error sending audio: {e}")
255
+ await self.stop_processing_metrics()
256
+
257
+ yield None
258
+
259
+ @traced_stt
260
+ async def _handle_transcription(
261
+ self, transcript: str, is_final: bool, language: Optional[str] = None
262
+ ):
263
+ """Handle a transcription result with tracing.
264
+
265
+ This method is decorated with @traced_stt to capture STT metrics
266
+ including transcription latency and text content for observability.
267
+
268
+ Args:
269
+ transcript: The transcribed text.
270
+ is_final: Whether this is a final (not interim) transcription.
271
+ language: The detected/configured language.
272
+ """
273
+ # Tracing is handled by the @traced_stt decorator
274
+ # This method exists to provide the hook for metrics collection
275
+ pass
276
+
277
+ async def _send_end_message(self):
278
+ """Send end message to finalize current transcription."""
279
+ if self._websocket and self._websocket.state is State.OPEN:
280
+ try:
281
+ await self._websocket.send(STOP_MESSAGE)
282
+ logger.debug("Ringg Parrot STT: Sent end message to finalize transcription")
283
+ except Exception as e:
284
+ logger.error(f"Ringg Parrot STT: Error sending end message: {e}")
285
+
286
+ async def process_frame(self, frame: Frame, direction: FrameDirection):
287
+ """Process frames, handling interruption and finalization.
288
+
289
+ Handles:
290
+ - UserStoppedSpeakingFrame: Sends end message to get final transcript
291
+ - StartInterruptionFrame: Sends end message to finalize any pending
292
+ transcript before the interruption context switch
293
+
294
+ Args:
295
+ frame: The frame to process.
296
+ direction: The direction of frame processing.
297
+ """
298
+ await super().process_frame(frame, direction)
299
+
300
+ if isinstance(frame, UserStoppedSpeakingFrame):
301
+ # User stopped speaking - finalize to get the transcript
302
+ await self._send_end_message()
303
+
304
+ async def _receive_task_handler(self):
305
+ """Handle incoming messages from the WebSocket server.
306
+
307
+ Processes transcript messages (partial and final), chunk acknowledgments,
308
+ and error responses. Emits appropriate frames for each message type.
309
+ """
310
+ if not self._websocket:
311
+ return
312
+
313
+ try:
314
+ async for message in self._websocket:
315
+ try:
316
+ content = json.loads(message)
317
+ except json.JSONDecodeError:
318
+ logger.warning(f"Ringg Parrot STT: Invalid JSON: {message}")
319
+ continue
320
+
321
+ msg_type = content.get("type")
322
+
323
+ if msg_type == "transcript":
324
+ transcription = content.get("transcription", "")
325
+ is_partial = content.get("is_partial", True)
326
+
327
+ if is_partial:
328
+ # Partial/interim transcription
329
+ if transcription.strip():
330
+ await self.push_frame(
331
+ InterimTranscriptionFrame(
332
+ text=transcription,
333
+ user_id=self._user_id,
334
+ timestamp=time_now_iso8601(),
335
+ )
336
+ )
337
+ else:
338
+ # Final transcription
339
+ if transcription.strip():
340
+ await self.push_frame(
341
+ TranscriptionFrame(
342
+ text=transcription,
343
+ user_id=self._user_id,
344
+ timestamp=time_now_iso8601(),
345
+ )
346
+ )
347
+ await self._handle_transcription(
348
+ transcription, is_final=True, language=self._params.language
349
+ )
350
+ await self.stop_processing_metrics()
351
+
352
+ elif msg_type == "chunk":
353
+ # Acknowledgment of received audio chunk - no action needed
354
+ pass
355
+
356
+ elif msg_type == "keepalive":
357
+ # Keepalive response - no action needed
358
+ pass
359
+
360
+ elif msg_type == "error":
361
+ error_detail = content.get("detail", "Unknown error")
362
+ logger.error(f"Ringg Parrot STT error: {error_detail}")
363
+ await self.push_error(ErrorFrame(f"Ringg Parrot STT: {error_detail}"))
364
+
365
+ elif msg_type == "ready":
366
+ # Already handled in start(), but log if received again
367
+ logger.debug("Ringg Parrot STT: Received additional ready message")
368
+
369
+ else:
370
+ logger.warning(f"Ringg Parrot STT: Unknown message type: {msg_type}")
371
+
372
+ except websockets.exceptions.ConnectionClosed:
373
+ # Expected when closing the connection
374
+ logger.debug("Ringg Parrot STT: WebSocket connection closed")
375
+ except Exception as e:
376
+ logger.error(f"Ringg Parrot STT receive error: {e}")
377
+ await self.push_error(ErrorFrame(f"Ringg Parrot STT receive error: {e}"))
@@ -109,7 +109,6 @@ class STTService(AIService):
109
109
 
110
110
  async def set_model(self, model: str):
111
111
  """Set the speech recognition model.
112
-
113
112
  Args:
114
113
  model: The name of the model to use for speech recognition.
115
114
  """