dv-pipecat-ai 0.0.85.dev864__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.dev864/src/dv_pipecat_ai.egg-info → dv_pipecat_ai-0.0.85.dev866}/PKG-INFO +4 -1
  2. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/pyproject.toml +3 -0
  3. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866/src/dv_pipecat_ai.egg-info}/PKG-INFO +4 -1
  4. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/dv_pipecat_ai.egg-info/SOURCES.txt +2 -0
  5. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/dv_pipecat_ai.egg-info/requires.txt +3 -0
  6. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/transcript_processor.py +2 -2
  7. dv_pipecat_ai-0.0.85.dev866/src/pipecat/services/ringg/__init__.py +11 -0
  8. dv_pipecat_ai-0.0.85.dev866/src/pipecat/services/ringg/stt.py +377 -0
  9. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/stt_service.py +0 -1
  10. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/uv.lock +4549 -4505
  11. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.dockerignore +0 -0
  12. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
  13. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
  14. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
  15. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
  16. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
  17. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
  18. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
  19. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  20. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  21. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/build.yaml +0 -0
  22. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/coverage.yaml +0 -0
  23. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/force_push_to_pypi.yml +0 -0
  24. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/format.yaml +0 -0
  25. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/github.yml +0 -0
  26. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/promote-prod.yml +0 -0
  27. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/publish.yaml +0 -0
  28. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/publish_test.yaml +0 -0
  29. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/python-compatibility.yaml +0 -0
  30. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/set-traffic-split.yml +0 -0
  31. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/sync-quickstart.yaml +0 -0
  32. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.github/workflows/tests.yaml +0 -0
  33. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.gitignore +0 -0
  34. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.pre-commit-config.yaml +0 -0
  35. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/.readthedocs.yaml +0 -0
  36. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/CHANGELOG.md +0 -0
  37. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/CHANGELOG.md.template +0 -0
  38. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/CLAUDE.md +0 -0
  39. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/COMMUNITY_INTEGRATIONS.md +0 -0
  40. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/CONTRIBUTING.md +0 -0
  41. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/DOCKER_BUILD_OPTIMIZATION_SUMMARY.md +0 -0
  42. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/LICENSE +0 -0
  43. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/MANIFEST.in +0 -0
  44. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/README.md +0 -0
  45. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/SECURITY.md +0 -0
  46. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/ansible.cfg +0 -0
  47. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/ansible_deployment.sh +0 -0
  48. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/cleanup_old_containers.yml +0 -0
  49. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/codecov.yml +0 -0
  50. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/create-new-machine/ansible.cfg +0 -0
  51. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/create-new-machine/ansible_setup.sh +0 -0
  52. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/create-new-machine/inventory.ini +0 -0
  53. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/create-new-machine/replace_env.yml +0 -0
  54. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/create-new-machine/setup_playbook.yml +0 -0
  55. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/create_inventory.py +0 -0
  56. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/delete_old_dockers.sh +0 -0
  57. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/deploy.sh +0 -0
  58. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/deploy_playbook.yml +0 -0
  59. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/docker-compose.dev.yml +0 -0
  60. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/dump_logs.yml +0 -0
  61. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/env.example +0 -0
  62. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/fetch_logs.yml +0 -0
  63. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/inventory.ini +0 -0
  64. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/.helmignore +0 -0
  65. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/Chart.yaml +0 -0
  66. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
  67. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
  68. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/cluster-role.yaml +0 -0
  69. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
  70. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
  71. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
  72. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/keda-api-key-secret.yaml +0 -0
  73. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/keda-scaledobject.yaml +0 -0
  74. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/keda-trigger-auth.yaml +0 -0
  75. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/pdb.yaml +0 -0
  76. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/templates/service.yaml +0 -0
  77. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/values-canary.yaml +0 -0
  78. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/values-prod.yaml +0 -0
  79. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/values-stage.yaml +0 -0
  80. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/dv-pipecat/values.yaml +0 -0
  81. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/k8s/istio/destination-virtualservice.yaml +0 -0
  82. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/merge-code-into-single-file.sh +0 -0
  83. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/pipecat.png +0 -0
  84. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/restart.sh +0 -0
  85. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/restart_playbook.yml +0 -0
  86. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/setup.cfg +0 -0
  87. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
  88. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
  89. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/__init__.py +0 -0
  90. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/__init__.py +0 -0
  91. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/base_llm_adapter.py +0 -0
  92. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/schemas/__init__.py +0 -0
  93. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/schemas/direct_function.py +0 -0
  94. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/schemas/function_schema.py +0 -0
  95. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
  96. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/services/__init__.py +0 -0
  97. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
  98. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
  99. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
  100. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
  101. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
  102. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
  103. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/__init__.py +0 -0
  104. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/__init__.py +0 -0
  105. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-0.wav +0 -0
  106. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-1.wav +0 -0
  107. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-2.wav +0 -0
  108. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-3.wav +0 -0
  109. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-4.wav +0 -0
  110. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-5.wav +0 -0
  111. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-6.wav +0 -0
  112. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-7.wav +0 -0
  113. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-8.wav +0 -0
  114. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-9.wav +0 -0
  115. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-pound.wav +0 -0
  116. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/dtmf-star.wav +0 -0
  117. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/types.py +0 -0
  118. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/dtmf/utils.py +0 -0
  119. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/__init__.py +0 -0
  120. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/aic_filter.py +0 -0
  121. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
  122. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/koala_filter.py +0 -0
  123. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/krisp_filter.py +0 -0
  124. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/krisp_viva_filter.py +0 -0
  125. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
  126. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/filters/pyrnn_local_filter.py +0 -0
  127. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/interruptions/__init__.py +0 -0
  128. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
  129. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
  130. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/mixers/__init__.py +0 -0
  131. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
  132. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
  133. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/resamplers/__init__.py +0 -0
  134. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
  135. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
  136. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
  137. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/resamplers/soxr_stream_resampler.py +0 -0
  138. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/__init__.py +0 -0
  139. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
  140. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
  141. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
  142. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/data/__init__.py +0 -0
  143. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/data/smart-turn-v3.0.onnx +0 -0
  144. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
  145. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
  146. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
  147. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
  148. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v2.py +0 -0
  149. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v3.py +0 -0
  150. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/utils.py +0 -0
  151. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/vad/__init__.py +0 -0
  152. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/vad/data/README.md +0 -0
  153. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/vad/data/__init__.py +0 -0
  154. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
  155. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/vad/data/silero_vad_v2.onnx +0 -0
  156. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/vad/silero.py +0 -0
  157. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
  158. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/clocks/__init__.py +0 -0
  159. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/clocks/base_clock.py +0 -0
  160. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/clocks/system_clock.py +0 -0
  161. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/extensions/__init__.py +0 -0
  162. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/extensions/ivr/__init__.py +0 -0
  163. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/extensions/ivr/ivr_navigator.py +0 -0
  164. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/extensions/voicemail/__init__.py +0 -0
  165. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/extensions/voicemail/voicemail_detector.py +0 -0
  166. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/frames/__init__.py +0 -0
  167. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/frames/frames.proto +0 -0
  168. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/frames/frames.py +0 -0
  169. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
  170. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/metrics/__init__.py +0 -0
  171. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/metrics/connection_metrics.py +0 -0
  172. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/metrics/metrics.py +0 -0
  173. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/__init__.py +0 -0
  174. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/base_observer.py +0 -0
  175. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/loggers/__init__.py +0 -0
  176. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
  177. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
  178. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
  179. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
  180. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/observers/turn_tracking_observer.py +0 -0
  181. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/__init__.py +0 -0
  182. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/base_pipeline.py +0 -0
  183. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/base_task.py +0 -0
  184. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/llm_switcher.py +0 -0
  185. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
  186. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/pipeline.py +0 -0
  187. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/runner.py +0 -0
  188. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/service_switcher.py +0 -0
  189. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
  190. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/task.py +0 -0
  191. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/task_observer.py +0 -0
  192. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
  193. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/pipeline/tts_switcher.py +0 -0
  194. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/__init__.py +0 -0
  195. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/__init__.py +0 -0
  196. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/dtmf_aggregator.py +0 -0
  197. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/gated.py +0 -0
  198. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/gated_llm_context.py +0 -0
  199. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/gated_open_ai_llm_context.py +0 -0
  200. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/llm_context.py +0 -0
  201. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/llm_response.py +0 -0
  202. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/llm_response_universal.py +0 -0
  203. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
  204. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/sentence.py +0 -0
  205. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/user_response.py +0 -0
  206. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
  207. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/async_generator.py +0 -0
  208. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/audio/__init__.py +0 -0
  209. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
  210. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/consumer_processor.py +0 -0
  211. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/dtmf_aggregator.py +0 -0
  212. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/__init__.py +0 -0
  213. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/frame_filter.py +0 -0
  214. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/function_filter.py +0 -0
  215. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/identity_filter.py +0 -0
  216. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/null_filter.py +0 -0
  217. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
  218. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
  219. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
  220. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/frame_processor.py +0 -0
  221. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/frameworks/__init__.py +0 -0
  222. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/frameworks/langchain.py +0 -0
  223. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/frameworks/rtvi.py +0 -0
  224. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/frameworks/strands_agents.py +0 -0
  225. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/gstreamer/__init__.py +0 -0
  226. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
  227. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/idle_frame_processor.py +0 -0
  228. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/logger.py +0 -0
  229. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/metrics/__init__.py +0 -0
  230. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/metrics/frame_processor_metrics.py +0 -0
  231. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/metrics/sentry.py +0 -0
  232. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/producer_processor.py +0 -0
  233. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/text_transformer.py +0 -0
  234. {dv_pipecat_ai-0.0.85.dev864 → 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.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/processors/user_idle_processor.py +0 -0
  236. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/py.typed +0 -0
  237. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/runner/__init__.py +0 -0
  238. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/runner/daily.py +0 -0
  239. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/runner/livekit.py +0 -0
  240. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/runner/run.py +0 -0
  241. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/runner/types.py +0 -0
  242. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/runner/utils.py +0 -0
  243. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/__init__.py +0 -0
  244. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/asterisk.py +0 -0
  245. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/asterisk_chan_websocket_original.py +0 -0
  246. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/base_serializer.py +0 -0
  247. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/convox.py +0 -0
  248. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/custom.py +0 -0
  249. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/exotel.py +0 -0
  250. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/livekit.py +0 -0
  251. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/plivo.py +0 -0
  252. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/protobuf.py +0 -0
  253. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/telnyx.py +0 -0
  254. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/twilio.py +0 -0
  255. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/serializers/vi.py +0 -0
  256. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/__init__.py +0 -0
  257. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/ai_service.py +0 -0
  258. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/ai_services.py +0 -0
  259. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/anthropic/__init__.py +0 -0
  260. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/anthropic/llm.py +0 -0
  261. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/assemblyai/__init__.py +0 -0
  262. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/assemblyai/models.py +0 -0
  263. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/assemblyai/stt.py +0 -0
  264. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/asyncai/__init__.py +0 -0
  265. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/asyncai/tts.py +0 -0
  266. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/__init__.py +0 -0
  267. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/llm.py +0 -0
  268. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/nova_sonic/__init__.py +0 -0
  269. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/nova_sonic/context.py +0 -0
  270. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/nova_sonic/frames.py +0 -0
  271. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/nova_sonic/llm.py +0 -0
  272. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/nova_sonic/ready.wav +0 -0
  273. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/stt.py +0 -0
  274. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/tts.py +0 -0
  275. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws/utils.py +0 -0
  276. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
  277. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
  278. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
  279. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
  280. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/__init__.py +0 -0
  281. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/common.py +0 -0
  282. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/image.py +0 -0
  283. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/llm.py +0 -0
  284. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/realtime/__init__.py +0 -0
  285. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/realtime/llm.py +0 -0
  286. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/stt.py +0 -0
  287. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/azure/tts.py +0 -0
  288. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/cartesia/__init__.py +0 -0
  289. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/cartesia/stt.py +0 -0
  290. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/cartesia/tts.py +0 -0
  291. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/cerebras/__init__.py +0 -0
  292. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/cerebras/llm.py +0 -0
  293. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/deepgram/__init__.py +0 -0
  294. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/deepgram/flux/__init__.py +0 -0
  295. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/deepgram/flux/stt.py +0 -0
  296. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/deepgram/stt.py +0 -0
  297. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/deepgram/tts.py +0 -0
  298. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/deepseek/__init__.py +0 -0
  299. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/deepseek/llm.py +0 -0
  300. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/elevenlabs/__init__.py +0 -0
  301. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/elevenlabs/stt.py +0 -0
  302. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/elevenlabs/tts.py +0 -0
  303. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/fal/__init__.py +0 -0
  304. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/fal/image.py +0 -0
  305. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/fal/stt.py +0 -0
  306. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/fireworks/__init__.py +0 -0
  307. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/fireworks/llm.py +0 -0
  308. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/fish/__init__.py +0 -0
  309. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/fish/tts.py +0 -0
  310. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
  311. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
  312. {dv_pipecat_ai-0.0.85.dev864 → 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.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
  314. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/gladia/__init__.py +0 -0
  315. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/gladia/config.py +0 -0
  316. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/gladia/stt.py +0 -0
  317. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/__init__.py +0 -0
  318. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/frames.py +0 -0
  319. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/gemini_live/__init__.py +0 -0
  320. {dv_pipecat_ai-0.0.85.dev864 → 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.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/gemini_live/llm.py +0 -0
  322. {dv_pipecat_ai-0.0.85.dev864 → 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.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/google.py +0 -0
  324. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/image.py +0 -0
  325. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/llm.py +0 -0
  326. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/llm_openai.py +0 -0
  327. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/llm_vertex.py +0 -0
  328. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/rtvi.py +0 -0
  329. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/stt.py +0 -0
  330. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/google/tts.py +0 -0
  331. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/grok/__init__.py +0 -0
  332. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/grok/llm.py +0 -0
  333. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/groq/__init__.py +0 -0
  334. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/groq/llm.py +0 -0
  335. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/groq/stt.py +0 -0
  336. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/groq/tts.py +0 -0
  337. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/hamsa/__init__.py +0 -0
  338. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/hamsa/stt.py +0 -0
  339. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/heygen/__init__.py +0 -0
  340. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/heygen/api.py +0 -0
  341. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/heygen/client.py +0 -0
  342. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/heygen/video.py +0 -0
  343. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/hume/__init__.py +0 -0
  344. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/hume/tts.py +0 -0
  345. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/image_service.py +0 -0
  346. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/inworld/__init__.py +0 -0
  347. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/inworld/tts.py +0 -0
  348. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/llm_service.py +0 -0
  349. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/lmnt/__init__.py +0 -0
  350. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/lmnt/tts.py +0 -0
  351. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/mcp_service.py +0 -0
  352. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/mem0/__init__.py +0 -0
  353. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/mem0/memory.py +0 -0
  354. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/minimax/__init__.py +0 -0
  355. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/minimax/tts.py +0 -0
  356. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/mistral/__init__.py +0 -0
  357. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/mistral/llm.py +0 -0
  358. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/moondream/__init__.py +0 -0
  359. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/moondream/vision.py +0 -0
  360. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/neuphonic/__init__.py +0 -0
  361. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/neuphonic/tts.py +0 -0
  362. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/nim/__init__.py +0 -0
  363. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/nim/llm.py +0 -0
  364. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/ollama/__init__.py +0 -0
  365. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/ollama/llm.py +0 -0
  366. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/__init__.py +0 -0
  367. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/base_llm.py +0 -0
  368. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/image.py +0 -0
  369. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/llm.py +0 -0
  370. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/realtime/__init__.py +0 -0
  371. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/realtime/context.py +0 -0
  372. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/realtime/events.py +0 -0
  373. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/realtime/frames.py +0 -0
  374. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/realtime/llm.py +0 -0
  375. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/stt.py +0 -0
  376. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai/tts.py +0 -0
  377. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime/__init__.py +0 -0
  378. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime/azure.py +0 -0
  379. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime/context.py +0 -0
  380. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime/events.py +0 -0
  381. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime/frames.py +0 -0
  382. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
  383. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
  384. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
  385. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
  386. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
  387. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
  388. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openpipe/__init__.py +0 -0
  389. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openpipe/llm.py +0 -0
  390. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openrouter/__init__.py +0 -0
  391. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/openrouter/llm.py +0 -0
  392. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/perplexity/__init__.py +0 -0
  393. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/perplexity/llm.py +0 -0
  394. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/piper/__init__.py +0 -0
  395. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/piper/tts.py +0 -0
  396. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/playht/__init__.py +0 -0
  397. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/playht/tts.py +0 -0
  398. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/qwen/__init__.py +0 -0
  399. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/qwen/llm.py +0 -0
  400. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/rime/__init__.py +0 -0
  401. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/rime/tts.py +0 -0
  402. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/riva/__init__.py +0 -0
  403. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/riva/stt.py +0 -0
  404. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/riva/tts.py +0 -0
  405. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/salesforce/__init__.py +0 -0
  406. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/salesforce/llm.py +0 -0
  407. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/sambanova/__init__.py +0 -0
  408. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/sambanova/llm.py +0 -0
  409. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/sambanova/stt.py +0 -0
  410. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/sarvam/__init__.py +0 -0
  411. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/sarvam/stt.py +0 -0
  412. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/sarvam/tts.py +0 -0
  413. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/simli/__init__.py +0 -0
  414. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/simli/video.py +0 -0
  415. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/soniox/__init__.py +0 -0
  416. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/soniox/stt.py +0 -0
  417. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/speechmatics/__init__.py +0 -0
  418. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/speechmatics/stt.py +0 -0
  419. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/tavus/__init__.py +0 -0
  420. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/tavus/video.py +0 -0
  421. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/together/__init__.py +0 -0
  422. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/together/llm.py +0 -0
  423. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/tts_service.py +0 -0
  424. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/ultravox/__init__.py +0 -0
  425. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/ultravox/stt.py +0 -0
  426. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/vision_service.py +0 -0
  427. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/vistaar/__init__.py +0 -0
  428. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/vistaar/llm.py +0 -0
  429. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/websocket_service.py +0 -0
  430. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/whisper/__init__.py +0 -0
  431. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/whisper/base_stt.py +0 -0
  432. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/whisper/stt.py +0 -0
  433. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/xtts/__init__.py +0 -0
  434. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/services/xtts/tts.py +0 -0
  435. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/sync/__init__.py +0 -0
  436. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/sync/base_notifier.py +0 -0
  437. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/sync/event_notifier.py +0 -0
  438. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/tests/__init__.py +0 -0
  439. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/tests/utils.py +0 -0
  440. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transcriptions/__init__.py +0 -0
  441. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transcriptions/language.py +0 -0
  442. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/__init__.py +0 -0
  443. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/base_input.py +0 -0
  444. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/base_output.py +0 -0
  445. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/base_transport.py +0 -0
  446. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/daily/__init__.py +0 -0
  447. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/daily/transport.py +0 -0
  448. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/daily/utils.py +0 -0
  449. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/heygen/__init__.py +0 -0
  450. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/heygen/transport.py +0 -0
  451. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/livekit/__init__.py +0 -0
  452. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/livekit/transport.py +0 -0
  453. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/local/__init__.py +0 -0
  454. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/local/audio.py +0 -0
  455. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/local/tk.py +0 -0
  456. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/network/__init__.py +0 -0
  457. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/network/fastapi_websocket.py +0 -0
  458. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/network/small_webrtc.py +0 -0
  459. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/network/webrtc_connection.py +0 -0
  460. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/network/websocket_client.py +0 -0
  461. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/network/websocket_server.py +0 -0
  462. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/services/__init__.py +0 -0
  463. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/services/daily.py +0 -0
  464. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/services/helpers/__init__.py +0 -0
  465. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
  466. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/services/livekit.py +0 -0
  467. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/services/tavus.py +0 -0
  468. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/smallwebrtc/__init__.py +0 -0
  469. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/smallwebrtc/connection.py +0 -0
  470. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/smallwebrtc/request_handler.py +0 -0
  471. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/smallwebrtc/transport.py +0 -0
  472. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/tavus/__init__.py +0 -0
  473. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/tavus/transport.py +0 -0
  474. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/websocket/__init__.py +0 -0
  475. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/websocket/client.py +0 -0
  476. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/websocket/fastapi.py +0 -0
  477. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/websocket/server.py +0 -0
  478. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/whatsapp/__init__.py +0 -0
  479. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/whatsapp/api.py +0 -0
  480. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/transports/whatsapp/client.py +0 -0
  481. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/__init__.py +0 -0
  482. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/asyncio/__init__.py +0 -0
  483. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/asyncio/task_manager.py +0 -0
  484. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/base_object.py +0 -0
  485. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/logger_config.py +0 -0
  486. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/network.py +0 -0
  487. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/redis.py +0 -0
  488. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/string.py +0 -0
  489. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/text/__init__.py +0 -0
  490. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
  491. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/text/base_text_filter.py +0 -0
  492. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
  493. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
  494. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
  495. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
  496. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/time.py +0 -0
  497. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/__init__.py +0 -0
  498. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/class_decorators.py +0 -0
  499. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
  500. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/service_attributes.py +0 -0
  501. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/service_decorators.py +0 -0
  502. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/setup.py +0 -0
  503. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
  504. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
  505. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/src/pipecat/utils/utils.py +0 -0
  506. {dv_pipecat_ai-0.0.85.dev864 → dv_pipecat_ai-0.0.85.dev866}/stop_container.yml +0 -0
  507. {dv_pipecat_ai-0.0.85.dev864 → 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.dev864
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.dev864
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
@@ -10,8 +10,8 @@ This module provides processors that convert speech and text frames into structu
10
10
  transcript messages with timestamps, enabling conversation history tracking and analysis.
11
11
  """
12
12
 
13
- from typing import List, Optional
14
13
  import uuid
14
+ from typing import List, Optional
15
15
 
16
16
  from loguru import logger
17
17
 
@@ -92,7 +92,7 @@ class UserTranscriptProcessor(BaseTranscriptProcessor):
92
92
  user_id=frame.user_id,
93
93
  content=frame.text,
94
94
  timestamp=frame.timestamp,
95
- message_id=str(uuid.uuid4()),
95
+ message_id=frame.id,
96
96
  )
97
97
  await self._emit_update([message])
98
98
  elif isinstance(frame, TranscriptDropFrame):
@@ -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
  """