dv-pipecat-ai 0.0.82.dev66__tar.gz → 0.0.82.dev68__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 (463) hide show
  1. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/PKG-INFO +2 -1
  2. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/pyproject.toml +1 -1
  3. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/dv_pipecat_ai.egg-info/PKG-INFO +2 -1
  4. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/dv_pipecat_ai.egg-info/SOURCES.txt +1 -0
  5. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/dv_pipecat_ai.egg-info/requires.txt +1 -0
  6. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/elevenlabs/stt.py +10 -0
  7. dv_pipecat_ai-0.0.82.dev68/src/pipecat/services/sarvam/__init__.py +15 -0
  8. dv_pipecat_ai-0.0.82.dev68/src/pipecat/services/sarvam/stt.py +450 -0
  9. dv_pipecat_ai-0.0.82.dev66/src/pipecat/services/sarvam/__init__.py +0 -8
  10. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.dockerignore +0 -0
  11. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
  12. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
  13. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
  14. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
  15. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
  16. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
  17. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
  18. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  19. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  20. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/workflows/build.yaml +0 -0
  21. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/workflows/coverage.yaml +0 -0
  22. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/workflows/format.yaml +0 -0
  23. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/workflows/github.yml +0 -0
  24. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/workflows/promote-prod.yml +0 -0
  25. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/workflows/publish.yaml +0 -0
  26. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/workflows/publish_test.yaml +0 -0
  27. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/workflows/python-compatibility.yaml +0 -0
  28. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/workflows/set-traffic-split.yml +0 -0
  29. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/workflows/sync-quickstart.yaml +0 -0
  30. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.github/workflows/tests.yaml +0 -0
  31. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.gitignore +0 -0
  32. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.pre-commit-config.yaml +0 -0
  33. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/.readthedocs.yaml +0 -0
  34. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/CHANGELOG.md +0 -0
  35. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/CHANGELOG.md.template +0 -0
  36. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/CLAUDE.md +0 -0
  37. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/CONTRIBUTING.md +0 -0
  38. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/DOCKER_BUILD_OPTIMIZATION_SUMMARY.md +0 -0
  39. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/LICENSE +0 -0
  40. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/MANIFEST.in +0 -0
  41. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/README.md +0 -0
  42. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/ansible.cfg +0 -0
  43. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/ansible_deployment.sh +0 -0
  44. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/cleanup_old_containers.yml +0 -0
  45. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/codecov.yml +0 -0
  46. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/create-new-machine/ansible.cfg +0 -0
  47. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/create-new-machine/ansible_setup.sh +0 -0
  48. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/create-new-machine/inventory.ini +0 -0
  49. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/create-new-machine/replace_env.yml +0 -0
  50. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/create-new-machine/setup_playbook.yml +0 -0
  51. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/create_inventory.py +0 -0
  52. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/delete_old_dockers.sh +0 -0
  53. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/deploy.sh +0 -0
  54. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/deploy_playbook.yml +0 -0
  55. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/docker-compose.dev.yml +0 -0
  56. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/dump_logs.yml +0 -0
  57. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/env.example +0 -0
  58. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/fetch_logs.yml +0 -0
  59. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/inventory.ini +0 -0
  60. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/.helmignore +0 -0
  61. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/Chart.yaml +0 -0
  62. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
  63. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
  64. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/templates/cluster-role.yaml +0 -0
  65. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
  66. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
  67. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
  68. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/templates/keda-api-key-secret.yaml +0 -0
  69. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/templates/keda-scaledobject.yaml +0 -0
  70. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/templates/keda-trigger-auth.yaml +0 -0
  71. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/templates/pdb.yaml +0 -0
  72. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/templates/service.yaml +0 -0
  73. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/values-canary.yaml +0 -0
  74. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/values-prod.yaml +0 -0
  75. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/values-stage.yaml +0 -0
  76. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/dv-pipecat/values.yaml +0 -0
  77. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/k8s/istio/destination-virtualservice.yaml +0 -0
  78. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/merge-code-into-single-file.sh +0 -0
  79. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/pipecat.png +0 -0
  80. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/restart.sh +0 -0
  81. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/restart_playbook.yml +0 -0
  82. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/setup.cfg +0 -0
  83. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
  84. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
  85. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/__init__.py +0 -0
  86. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/adapters/__init__.py +0 -0
  87. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/adapters/base_llm_adapter.py +0 -0
  88. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/adapters/schemas/__init__.py +0 -0
  89. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/adapters/schemas/direct_function.py +0 -0
  90. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/adapters/schemas/function_schema.py +0 -0
  91. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
  92. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/adapters/services/__init__.py +0 -0
  93. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
  94. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
  95. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
  96. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
  97. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
  98. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
  99. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/__init__.py +0 -0
  100. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/dtmf/__init__.py +0 -0
  101. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/dtmf/dtmf-0.wav +0 -0
  102. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/dtmf/dtmf-1.wav +0 -0
  103. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/dtmf/dtmf-2.wav +0 -0
  104. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/dtmf/dtmf-3.wav +0 -0
  105. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/dtmf/dtmf-4.wav +0 -0
  106. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/dtmf/dtmf-5.wav +0 -0
  107. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/dtmf/dtmf-6.wav +0 -0
  108. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/dtmf/dtmf-7.wav +0 -0
  109. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/dtmf/dtmf-8.wav +0 -0
  110. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/dtmf/dtmf-9.wav +0 -0
  111. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/dtmf/dtmf-pound.wav +0 -0
  112. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/dtmf/dtmf-star.wav +0 -0
  113. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/dtmf/types.py +0 -0
  114. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/dtmf/utils.py +0 -0
  115. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/filters/__init__.py +0 -0
  116. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/filters/aic_filter.py +0 -0
  117. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
  118. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/filters/koala_filter.py +0 -0
  119. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/filters/krisp_filter.py +0 -0
  120. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
  121. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/filters/pyrnn_local_filter.py +0 -0
  122. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/interruptions/__init__.py +0 -0
  123. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
  124. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
  125. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/mixers/__init__.py +0 -0
  126. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
  127. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
  128. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/resamplers/__init__.py +0 -0
  129. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
  130. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
  131. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
  132. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/resamplers/soxr_stream_resampler.py +0 -0
  133. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/turn/__init__.py +0 -0
  134. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
  135. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
  136. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
  137. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
  138. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
  139. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
  140. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
  141. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v2.py +0 -0
  142. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/utils.py +0 -0
  143. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/vad/__init__.py +0 -0
  144. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/vad/data/__init__.py +0 -0
  145. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
  146. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/vad/data/silero_vad_v2.onnx +0 -0
  147. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/vad/silero.py +0 -0
  148. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
  149. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/clocks/__init__.py +0 -0
  150. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/clocks/base_clock.py +0 -0
  151. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/clocks/system_clock.py +0 -0
  152. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/extensions/__init__.py +0 -0
  153. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/extensions/ivr/__init__.py +0 -0
  154. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/extensions/ivr/ivr_navigator.py +0 -0
  155. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/extensions/voicemail/__init__.py +0 -0
  156. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/extensions/voicemail/voicemail_detector.py +0 -0
  157. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/frames/__init__.py +0 -0
  158. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/frames/frames.proto +0 -0
  159. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/frames/frames.py +0 -0
  160. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
  161. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/metrics/__init__.py +0 -0
  162. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/metrics/metrics.py +0 -0
  163. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/observers/__init__.py +0 -0
  164. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/observers/base_observer.py +0 -0
  165. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/observers/loggers/__init__.py +0 -0
  166. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
  167. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
  168. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
  169. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
  170. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/observers/turn_tracking_observer.py +0 -0
  171. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/pipeline/__init__.py +0 -0
  172. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/pipeline/base_pipeline.py +0 -0
  173. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/pipeline/base_task.py +0 -0
  174. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/pipeline/llm_switcher.py +0 -0
  175. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
  176. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/pipeline/pipeline.py +0 -0
  177. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/pipeline/runner.py +0 -0
  178. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/pipeline/service_switcher.py +0 -0
  179. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
  180. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/pipeline/task.py +0 -0
  181. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/pipeline/task_observer.py +0 -0
  182. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
  183. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/pipeline/tts_switcher.py +0 -0
  184. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/__init__.py +0 -0
  185. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/aggregators/__init__.py +0 -0
  186. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/aggregators/dtmf_aggregator.py +0 -0
  187. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/aggregators/gated.py +0 -0
  188. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/aggregators/gated_openai_llm_context.py +0 -0
  189. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/aggregators/llm_context.py +0 -0
  190. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/aggregators/llm_response.py +0 -0
  191. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/aggregators/llm_response_universal.py +0 -0
  192. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
  193. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/aggregators/sentence.py +0 -0
  194. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/aggregators/user_response.py +0 -0
  195. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
  196. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/async_generator.py +0 -0
  197. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/audio/__init__.py +0 -0
  198. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
  199. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/consumer_processor.py +0 -0
  200. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/dtmf_aggregator.py +0 -0
  201. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/filters/__init__.py +0 -0
  202. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/filters/frame_filter.py +0 -0
  203. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/filters/function_filter.py +0 -0
  204. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/filters/identity_filter.py +0 -0
  205. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/filters/null_filter.py +0 -0
  206. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
  207. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
  208. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
  209. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/frame_processor.py +0 -0
  210. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/frameworks/__init__.py +0 -0
  211. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/frameworks/langchain.py +0 -0
  212. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/frameworks/rtvi.py +0 -0
  213. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/gstreamer/__init__.py +0 -0
  214. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
  215. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/idle_frame_processor.py +0 -0
  216. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/logger.py +0 -0
  217. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/metrics/__init__.py +0 -0
  218. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/metrics/frame_processor_metrics.py +0 -0
  219. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/metrics/sentry.py +0 -0
  220. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/producer_processor.py +0 -0
  221. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/text_transformer.py +0 -0
  222. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/transcript_processor.py +0 -0
  223. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
  224. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/processors/user_idle_processor.py +0 -0
  225. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/py.typed +0 -0
  226. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/runner/__init__.py +0 -0
  227. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/runner/daily.py +0 -0
  228. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/runner/livekit.py +0 -0
  229. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/runner/run.py +0 -0
  230. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/runner/types.py +0 -0
  231. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/runner/utils.py +0 -0
  232. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/serializers/__init__.py +0 -0
  233. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/serializers/asterisk.py +0 -0
  234. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/serializers/base_serializer.py +0 -0
  235. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/serializers/convox.py +0 -0
  236. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/serializers/custom.py +0 -0
  237. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/serializers/exotel.py +0 -0
  238. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/serializers/livekit.py +0 -0
  239. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/serializers/plivo.py +0 -0
  240. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/serializers/protobuf.py +0 -0
  241. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/serializers/telnyx.py +0 -0
  242. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/serializers/twilio.py +0 -0
  243. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/__init__.py +0 -0
  244. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/ai_service.py +0 -0
  245. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/ai_services.py +0 -0
  246. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/anthropic/__init__.py +0 -0
  247. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/anthropic/llm.py +0 -0
  248. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/assemblyai/__init__.py +0 -0
  249. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/assemblyai/models.py +0 -0
  250. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/assemblyai/stt.py +0 -0
  251. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/asyncai/__init__.py +0 -0
  252. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/asyncai/tts.py +0 -0
  253. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/aws/__init__.py +0 -0
  254. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/aws/llm.py +0 -0
  255. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/aws/stt.py +0 -0
  256. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/aws/tts.py +0 -0
  257. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/aws/utils.py +0 -0
  258. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
  259. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
  260. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
  261. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
  262. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/aws_nova_sonic/ready.wav +0 -0
  263. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/azure/__init__.py +0 -0
  264. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/azure/common.py +0 -0
  265. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/azure/image.py +0 -0
  266. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/azure/llm.py +0 -0
  267. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/azure/stt.py +0 -0
  268. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/azure/tts.py +0 -0
  269. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/cartesia/__init__.py +0 -0
  270. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/cartesia/stt.py +0 -0
  271. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/cartesia/tts.py +0 -0
  272. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/cerebras/__init__.py +0 -0
  273. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/cerebras/llm.py +0 -0
  274. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/deepgram/__init__.py +0 -0
  275. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/deepgram/stt.py +0 -0
  276. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/deepgram/tts.py +0 -0
  277. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/deepseek/__init__.py +0 -0
  278. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/deepseek/llm.py +0 -0
  279. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/elevenlabs/__init__.py +0 -0
  280. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/elevenlabs/tts.py +0 -0
  281. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/fal/__init__.py +0 -0
  282. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/fal/image.py +0 -0
  283. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/fal/stt.py +0 -0
  284. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/fireworks/__init__.py +0 -0
  285. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/fireworks/llm.py +0 -0
  286. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/fish/__init__.py +0 -0
  287. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/fish/tts.py +0 -0
  288. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
  289. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
  290. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/gemini_multimodal_live/file_api.py +0 -0
  291. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
  292. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/gladia/__init__.py +0 -0
  293. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/gladia/config.py +0 -0
  294. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/gladia/stt.py +0 -0
  295. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/google/__init__.py +0 -0
  296. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/google/frames.py +0 -0
  297. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/google/google.py +0 -0
  298. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/google/image.py +0 -0
  299. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/google/llm.py +0 -0
  300. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/google/llm_openai.py +0 -0
  301. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/google/llm_vertex.py +0 -0
  302. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/google/rtvi.py +0 -0
  303. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/google/stt.py +0 -0
  304. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/google/tts.py +0 -0
  305. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/grok/__init__.py +0 -0
  306. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/grok/llm.py +0 -0
  307. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/groq/__init__.py +0 -0
  308. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/groq/llm.py +0 -0
  309. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/groq/stt.py +0 -0
  310. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/groq/tts.py +0 -0
  311. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/hamsa/__init__.py +0 -0
  312. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/hamsa/stt.py +0 -0
  313. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/heygen/__init__.py +0 -0
  314. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/heygen/api.py +0 -0
  315. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/heygen/client.py +0 -0
  316. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/heygen/video.py +0 -0
  317. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/image_service.py +0 -0
  318. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/inworld/__init__.py +0 -0
  319. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/inworld/tts.py +0 -0
  320. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/llm_service.py +0 -0
  321. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/lmnt/__init__.py +0 -0
  322. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/lmnt/tts.py +0 -0
  323. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/mcp_service.py +0 -0
  324. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/mem0/__init__.py +0 -0
  325. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/mem0/memory.py +0 -0
  326. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/minimax/__init__.py +0 -0
  327. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/minimax/tts.py +0 -0
  328. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/mistral/__init__.py +0 -0
  329. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/mistral/llm.py +0 -0
  330. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/moondream/__init__.py +0 -0
  331. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/moondream/vision.py +0 -0
  332. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/neuphonic/__init__.py +0 -0
  333. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/neuphonic/tts.py +0 -0
  334. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/nim/__init__.py +0 -0
  335. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/nim/llm.py +0 -0
  336. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/ollama/__init__.py +0 -0
  337. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/ollama/llm.py +0 -0
  338. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openai/__init__.py +0 -0
  339. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openai/base_llm.py +0 -0
  340. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openai/image.py +0 -0
  341. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openai/llm.py +0 -0
  342. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openai/stt.py +0 -0
  343. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openai/tts.py +0 -0
  344. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
  345. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
  346. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
  347. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
  348. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
  349. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
  350. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openpipe/__init__.py +0 -0
  351. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openpipe/llm.py +0 -0
  352. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openrouter/__init__.py +0 -0
  353. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/openrouter/llm.py +0 -0
  354. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/perplexity/__init__.py +0 -0
  355. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/perplexity/llm.py +0 -0
  356. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/piper/__init__.py +0 -0
  357. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/piper/tts.py +0 -0
  358. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/playht/__init__.py +0 -0
  359. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/playht/tts.py +0 -0
  360. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/qwen/__init__.py +0 -0
  361. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/qwen/llm.py +0 -0
  362. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/rime/__init__.py +0 -0
  363. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/rime/tts.py +0 -0
  364. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/riva/__init__.py +0 -0
  365. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/riva/stt.py +0 -0
  366. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/riva/tts.py +0 -0
  367. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/sambanova/__init__.py +0 -0
  368. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/sambanova/llm.py +0 -0
  369. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/sambanova/stt.py +0 -0
  370. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/sarvam/tts.py +0 -0
  371. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/simli/__init__.py +0 -0
  372. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/simli/video.py +0 -0
  373. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/soniox/__init__.py +0 -0
  374. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/soniox/stt.py +0 -0
  375. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/speechmatics/__init__.py +0 -0
  376. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/speechmatics/stt.py +0 -0
  377. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/stt_service.py +0 -0
  378. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/tavus/__init__.py +0 -0
  379. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/tavus/video.py +0 -0
  380. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/together/__init__.py +0 -0
  381. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/together/llm.py +0 -0
  382. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/tts_service.py +0 -0
  383. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/ultravox/__init__.py +0 -0
  384. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/ultravox/stt.py +0 -0
  385. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/vision_service.py +0 -0
  386. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/vistaar/__init__.py +0 -0
  387. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/vistaar/llm.py +0 -0
  388. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/websocket_service.py +0 -0
  389. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/whisper/__init__.py +0 -0
  390. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/whisper/base_stt.py +0 -0
  391. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/whisper/stt.py +0 -0
  392. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/xtts/__init__.py +0 -0
  393. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/services/xtts/tts.py +0 -0
  394. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/sync/__init__.py +0 -0
  395. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/sync/base_notifier.py +0 -0
  396. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/sync/event_notifier.py +0 -0
  397. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/tests/__init__.py +0 -0
  398. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/tests/utils.py +0 -0
  399. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transcriptions/__init__.py +0 -0
  400. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transcriptions/language.py +0 -0
  401. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/__init__.py +0 -0
  402. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/base_input.py +0 -0
  403. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/base_output.py +0 -0
  404. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/base_transport.py +0 -0
  405. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/daily/__init__.py +0 -0
  406. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/daily/transport.py +0 -0
  407. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/daily/utils.py +0 -0
  408. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/livekit/__init__.py +0 -0
  409. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/livekit/transport.py +0 -0
  410. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/local/__init__.py +0 -0
  411. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/local/audio.py +0 -0
  412. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/local/tk.py +0 -0
  413. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/network/__init__.py +0 -0
  414. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/network/fastapi_websocket.py +0 -0
  415. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/network/small_webrtc.py +0 -0
  416. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/network/webrtc_connection.py +0 -0
  417. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/network/websocket_client.py +0 -0
  418. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/network/websocket_server.py +0 -0
  419. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/services/__init__.py +0 -0
  420. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/services/daily.py +0 -0
  421. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/services/helpers/__init__.py +0 -0
  422. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
  423. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/services/livekit.py +0 -0
  424. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/services/tavus.py +0 -0
  425. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/smallwebrtc/__init__.py +0 -0
  426. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/smallwebrtc/connection.py +0 -0
  427. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/smallwebrtc/transport.py +0 -0
  428. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/tavus/__init__.py +0 -0
  429. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/tavus/transport.py +0 -0
  430. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/websocket/__init__.py +0 -0
  431. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/websocket/client.py +0 -0
  432. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/websocket/fastapi.py +0 -0
  433. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/websocket/server.py +0 -0
  434. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/whatsapp/__init__.py +0 -0
  435. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/whatsapp/api.py +0 -0
  436. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/transports/whatsapp/client.py +0 -0
  437. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/__init__.py +0 -0
  438. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/asyncio/__init__.py +0 -0
  439. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/asyncio/task_manager.py +0 -0
  440. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/base_object.py +0 -0
  441. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/logger_config.py +0 -0
  442. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/network.py +0 -0
  443. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/string.py +0 -0
  444. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/text/__init__.py +0 -0
  445. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
  446. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/text/base_text_filter.py +0 -0
  447. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
  448. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
  449. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
  450. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
  451. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/time.py +0 -0
  452. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/tracing/__init__.py +0 -0
  453. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/tracing/class_decorators.py +0 -0
  454. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
  455. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/tracing/service_attributes.py +0 -0
  456. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/tracing/service_decorators.py +0 -0
  457. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/tracing/setup.py +0 -0
  458. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
  459. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
  460. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/src/pipecat/utils/utils.py +0 -0
  461. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/stop_container.yml +0 -0
  462. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/test_elevenlabs_stt_segmented.py +0 -0
  463. {dv_pipecat_ai-0.0.82.dev66 → dv_pipecat_ai-0.0.82.dev68}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.82.dev66
3
+ Version: 0.0.82.dev68
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
@@ -134,6 +134,7 @@ Requires-Dist: fastapi<0.117.0,>=0.115.6; extra == "runner"
134
134
  Requires-Dist: pipecat-ai-small-webrtc-prebuilt>=1.0.0; extra == "runner"
135
135
  Provides-Extra: sambanova
136
136
  Provides-Extra: sarvam
137
+ Requires-Dist: sarvamai<1,>=0.1.19; extra == "sarvam"
137
138
  Requires-Dist: websockets<15.0,>=13.1; extra == "sarvam"
138
139
  Provides-Extra: sentry
139
140
  Requires-Dist: sentry-sdk~=2.23.1; extra == "sentry"
@@ -92,7 +92,7 @@ rime = [ "websockets>=13.1,<15.0" ]
92
92
  riva = [ "nvidia-riva-client~=2.21.1" ]
93
93
  runner = [ "python-dotenv>=1.0.0,<2.0.0", "uvicorn>=0.32.0,<1.0.0", "fastapi>=0.115.6,<0.117.0", "pipecat-ai-small-webrtc-prebuilt>=1.0.0"]
94
94
  sambanova = []
95
- sarvam = [ "websockets>=13.1,<15.0" ]
95
+ sarvam = [ "sarvamai>=0.1.19,<1", "websockets>=13.1,<15.0" ]
96
96
  sentry = [ "sentry-sdk~=2.23.1" ]
97
97
  local-smart-turn = [ "coremltools>=8.0", "transformers", "torch>=2.5.0,<3", "torchaudio>=2.5.0,<3" ]
98
98
  remote-smart-turn = []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.82.dev66
3
+ Version: 0.0.82.dev68
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
@@ -134,6 +134,7 @@ Requires-Dist: fastapi<0.117.0,>=0.115.6; extra == "runner"
134
134
  Requires-Dist: pipecat-ai-small-webrtc-prebuilt>=1.0.0; extra == "runner"
135
135
  Provides-Extra: sambanova
136
136
  Provides-Extra: sarvam
137
+ Requires-Dist: sarvamai<1,>=0.1.19; extra == "sarvam"
137
138
  Requires-Dist: websockets<15.0,>=13.1; extra == "sarvam"
138
139
  Provides-Extra: sentry
139
140
  Requires-Dist: sentry-sdk~=2.23.1; extra == "sentry"
@@ -370,6 +370,7 @@ src/pipecat/services/sambanova/__init__.py
370
370
  src/pipecat/services/sambanova/llm.py
371
371
  src/pipecat/services/sambanova/stt.py
372
372
  src/pipecat/services/sarvam/__init__.py
373
+ src/pipecat/services/sarvam/stt.py
373
374
  src/pipecat/services/sarvam/tts.py
374
375
  src/pipecat/services/simli/__init__.py
375
376
  src/pipecat/services/simli/video.py
@@ -179,6 +179,7 @@ pipecat-ai-small-webrtc-prebuilt>=1.0.0
179
179
  [sambanova]
180
180
 
181
181
  [sarvam]
182
+ sarvamai<1,>=0.1.19
182
183
  websockets<15.0,>=13.1
183
184
 
184
185
  [sentry]
@@ -199,6 +199,16 @@ def language_to_elevenlabs_language(language: Language) -> Optional[str]:
199
199
  # Lithuanian
200
200
  Language.LT: "lit",
201
201
  Language.LT_LT: "lit",
202
+ Language.TA: "tam", # Tamil
203
+ Language.TA_IN: "tam", # Tamil
204
+ Language.TE: "tel", # Telugu
205
+ Language.TE_IN: "tel", # Telugu
206
+ Language.KN: "kan", # Kannada
207
+ Language.KN_IN: "kan", # Kannada
208
+ Language.ML: "mal", # Malayalam
209
+ Language.ML_IN: "mal", # Malayalam
210
+ Language.MR: "mar", # Marathi
211
+ Language.MR_IN: "mar", # Marathi
202
212
  }
203
213
  return language_map.get(language)
204
214
 
@@ -0,0 +1,15 @@
1
+ #
2
+ # Copyright (c) 2024–2025, Daily
3
+ #
4
+ # SPDX-License-Identifier: BSD 2-Clause License
5
+ #
6
+
7
+ import sys
8
+
9
+ from pipecat.services import DeprecatedModuleProxy
10
+
11
+ from .stt import *
12
+ from .tts import *
13
+
14
+ # Old
15
+ sys.modules[__name__] = DeprecatedModuleProxy(globals(), "sarvam", "sarvam.tts")
@@ -0,0 +1,450 @@
1
+ """Sarvam AI Speech-to-Text service implementation.
2
+
3
+ This module provides a streaming Speech-to-Text service using Sarvam AI's WebSocket-based
4
+ API. It supports real-time transcription with Voice Activity Detection (VAD) and
5
+ can handle multiple audio formats for Indian language speech recognition.
6
+ """
7
+
8
+ import asyncio
9
+ import base64
10
+ import json
11
+ from enum import StrEnum
12
+ from typing import Literal, Optional
13
+ from urllib.parse import urlencode
14
+
15
+ from loguru import logger
16
+ from pydantic import BaseModel
17
+
18
+ from pipecat.audio.resamplers.resampy_resampler import ResampyResampler
19
+ from pipecat.frames.frames import (
20
+ CancelFrame,
21
+ EndFrame,
22
+ ErrorFrame,
23
+ StartFrame,
24
+ TranscriptionFrame,
25
+ )
26
+ from pipecat.services.stt_service import STTService
27
+ from pipecat.transcriptions.language import Language
28
+ from pipecat.utils.time import time_now_iso8601
29
+ from pipecat.utils.tracing.service_decorators import traced_stt
30
+
31
+ try:
32
+ import websockets
33
+ from sarvamai import AsyncSarvamAI
34
+ from sarvamai.speech_to_text_translate_streaming.socket_client import (
35
+ AsyncSpeechToTextTranslateStreamingSocketClient,
36
+ )
37
+ from websockets.protocol import State
38
+ except ModuleNotFoundError as e:
39
+ logger.error(f"Exception: {e}")
40
+ logger.error("In order to use Sarvam, you need to `pip install pipecat-ai[sarvam]`.")
41
+ raise Exception(f"Missing module: {e}")
42
+
43
+
44
+ def language_to_sarvam_language(language: Language) -> str:
45
+ """Convert Language enum to Sarvam language code.
46
+
47
+ Args:
48
+ language: The Language enum to convert.
49
+
50
+ Returns:
51
+ The corresponding Sarvam language code string.
52
+
53
+ Raises:
54
+ ValueError: If the language is not supported by Sarvam.
55
+ """
56
+ match language:
57
+ case Language.BN_IN:
58
+ return "bn-IN"
59
+ case Language.GU_IN:
60
+ return "gu-IN"
61
+ case Language.HI_IN:
62
+ return "hi-IN"
63
+ case Language.KN_IN:
64
+ return "kn-IN"
65
+ case Language.ML_IN:
66
+ return "ml-IN"
67
+ case Language.MR_IN:
68
+ return "mr-IN"
69
+ case Language.TA_IN:
70
+ return "ta-IN"
71
+ case Language.TE_IN:
72
+ return "te-IN"
73
+ case Language.PA_IN:
74
+ return "pa-IN"
75
+ case Language.OR_IN:
76
+ return "od-IN"
77
+ case Language.EN_US:
78
+ return "en-US"
79
+ case Language.EN_IN:
80
+ return "en-IN"
81
+ case Language.AS_IN:
82
+ return "as-IN"
83
+ case _:
84
+ raise ValueError(f"Unsupported language: {language}")
85
+
86
+
87
+ class TranscriptionMetrics(BaseModel):
88
+ """Metrics for transcription performance."""
89
+
90
+ audio_duration: float
91
+ processing_latency: float
92
+
93
+
94
+ class TranscriptionData(BaseModel):
95
+ """Data structure for transcription results."""
96
+
97
+ request_id: str
98
+ transcript: str
99
+ language_code: Optional[str]
100
+ metrics: Optional[TranscriptionMetrics] = None
101
+ is_final: Optional[bool] = None
102
+
103
+
104
+ class TranscriptionResponse(BaseModel):
105
+ """Response structure for transcription data."""
106
+
107
+ type: Literal["data"]
108
+ data: TranscriptionData
109
+
110
+
111
+ class VADSignal(StrEnum):
112
+ """Voice Activity Detection signal types."""
113
+
114
+ START = "START_SPEECH"
115
+ END = "END_SPEECH"
116
+
117
+
118
+ class EventData(BaseModel):
119
+ """Data structure for VAD events."""
120
+
121
+ signal_type: VADSignal
122
+ occured_at: float
123
+
124
+
125
+ class EventResponse(BaseModel):
126
+ """Response structure for VAD events."""
127
+
128
+ type: Literal["events"]
129
+ data: EventData
130
+
131
+
132
+ class SarvamSTTService(STTService):
133
+ """Sarvam speech-to-text service.
134
+
135
+ Provides real-time speech recognition using Sarvam's WebSocket API.
136
+ """
137
+
138
+ def __init__(
139
+ self,
140
+ *,
141
+ api_key: str,
142
+ model: str = "saaras:v2.5",
143
+ language: Language = Language.HI_IN,
144
+ **kwargs,
145
+ ):
146
+ """Initialize the Sarvam STT service.
147
+
148
+ Args:
149
+ api_key: Sarvam API key for authentication.
150
+ model: Sarvam model to use for transcription.
151
+ language: Language for transcription. Defaults to Hindi (India).
152
+ **kwargs: Additional arguments passed to the parent STTService.
153
+ Note: Sarvam requires 16kHz audio. If your input is a different
154
+ sample rate, it will be automatically resampled to 16kHz.
155
+ """
156
+ super().__init__(**kwargs)
157
+
158
+ self.set_model_name(model)
159
+ self._api_key = api_key
160
+ self._model = model
161
+ self._language = language
162
+ self._target_sample_rate = 16000 # Sarvam requires 16kHz
163
+
164
+ self._client = AsyncSarvamAI(api_subscription_key=api_key)
165
+ self._websocket = None
166
+ self._websocket_connection = None
167
+ self._listening_task = None
168
+ self._resampler = ResampyResampler()
169
+
170
+ # Register VAD event handlers
171
+ self._register_event_handler("on_speech_started")
172
+ self._register_event_handler("on_speech_ended")
173
+
174
+ def can_generate_metrics(self) -> bool:
175
+ """Check if this service can generate processing metrics.
176
+
177
+ Returns:
178
+ True, as Sarvam service supports metrics generation.
179
+ """
180
+ return True
181
+
182
+ async def set_model(self, model: str):
183
+ """Set the Sarvam model and reconnect.
184
+
185
+ Args:
186
+ model: The Sarvam model name to use.
187
+ """
188
+ await super().set_model(model)
189
+ logger.info(f"Switching STT model to: [{model}]")
190
+ self._model = model
191
+ await self._disconnect()
192
+ await self._connect()
193
+
194
+ async def set_language(self, language: Language):
195
+ """Set the language and reconnect.
196
+
197
+ Args:
198
+ language: The Language enum to use.
199
+ """
200
+ logger.info(f"Switching STT language to: [{language}]")
201
+ self._language = language
202
+ await self._disconnect()
203
+ await self._connect()
204
+
205
+ async def start(self, frame: StartFrame):
206
+ """Start the Sarvam STT service.
207
+
208
+ Args:
209
+ frame: The start frame containing initialization parameters.
210
+ """
211
+ await super().start(frame)
212
+ await self._connect()
213
+
214
+ async def stop(self, frame: EndFrame):
215
+ """Stop the Sarvam STT service.
216
+
217
+ Args:
218
+ frame: The end frame.
219
+ """
220
+ await super().stop(frame)
221
+ await self._disconnect()
222
+
223
+ async def cancel(self, frame: CancelFrame):
224
+ """Cancel the Sarvam STT service.
225
+
226
+ Args:
227
+ frame: The cancel frame.
228
+ """
229
+ await super().cancel(frame)
230
+ await self._disconnect()
231
+
232
+ async def run_stt(self, audio: bytes):
233
+ """Send audio data to Sarvam for transcription.
234
+
235
+ Args:
236
+ audio: Raw audio bytes to transcribe.
237
+
238
+ Yields:
239
+ Frame: None (transcription results come via WebSocket callbacks).
240
+ """
241
+ if not self._websocket_connection or self._websocket_connection.state != State.OPEN:
242
+ logger.warning("WebSocket not connected, cannot process audio")
243
+ yield None
244
+ return
245
+
246
+ try:
247
+ # Resample audio to 16kHz if needed
248
+ if self.sample_rate != self._target_sample_rate:
249
+ audio = await self._resampler.resample(
250
+ audio, self.sample_rate, self._target_sample_rate
251
+ )
252
+
253
+ # Convert audio bytes to base64 for Sarvam API
254
+ audio_base64 = base64.b64encode(audio).decode("utf-8")
255
+
256
+ message = {
257
+ "audio": {
258
+ "data": audio_base64,
259
+ "encoding": "audio/wav",
260
+ "sample_rate": self._target_sample_rate,
261
+ }
262
+ }
263
+ await self._websocket_connection.send(json.dumps(message))
264
+
265
+ except websockets.exceptions.ConnectionClosed:
266
+ logger.error("WebSocket connection closed")
267
+ await self.push_error(ErrorFrame("WebSocket connection closed"))
268
+ except Exception as e:
269
+ logger.error(f"Error sending audio to Sarvam: {e}")
270
+ await self.push_error(ErrorFrame(f"Failed to send audio: {e}"))
271
+
272
+ yield None
273
+
274
+ async def _connect(self):
275
+ """Connect to Sarvam WebSocket API directly."""
276
+ logger.debug("Connecting to Sarvam")
277
+
278
+ try:
279
+ # Build WebSocket URL and headers manually
280
+ ws_url = (
281
+ self._client._client_wrapper.get_environment().production
282
+ + "/speech-to-text-translate/ws"
283
+ )
284
+
285
+ # Add query parameters
286
+ query_params = {"model": self._model, "vad_signals": "true"}
287
+ query_string = urlencode(query_params)
288
+ ws_url = ws_url + f"?{query_string}"
289
+
290
+ # Get headers
291
+ headers = self._client._client_wrapper.get_headers()
292
+ headers["Api-Subscription-Key"] = self._api_key
293
+
294
+ # Connect to WebSocket directly
295
+ self._websocket_connection = await websockets.connect(
296
+ ws_url, additional_headers=headers
297
+ )
298
+
299
+ # Create the socket client wrapper
300
+ self._websocket = AsyncSpeechToTextTranslateStreamingSocketClient(
301
+ websocket=self._websocket_connection
302
+ )
303
+
304
+ # Start listening for messages
305
+ self._listening_task = asyncio.create_task(self._listen_for_messages())
306
+
307
+ logger.info(f"Connected to Sarvam successfully with model: {self._model}")
308
+
309
+ except websockets.exceptions.InvalidStatusCode as e:
310
+ error_msg = f"Failed to connect to Sarvam: HTTP {e.status_code}"
311
+ if e.status_code == 403:
312
+ error_msg += f" - Access denied. Your API key may not have access to model '{self._model}'. Available models: saaras:v2, saaras:v2.5"
313
+ elif e.status_code == 401:
314
+ error_msg += " - Invalid API key"
315
+ logger.error(error_msg)
316
+ self._websocket = None
317
+ self._websocket_connection = None
318
+ await self.push_error(ErrorFrame(error_msg))
319
+ except Exception as e:
320
+ logger.error(f"Failed to connect to Sarvam: {e}")
321
+ self._websocket = None
322
+ self._websocket_connection = None
323
+ await self.push_error(ErrorFrame(f"Failed to connect to Sarvam: {e}"))
324
+
325
+ async def _disconnect(self):
326
+ """Disconnect from Sarvam WebSocket API."""
327
+ if self._listening_task:
328
+ self._listening_task.cancel()
329
+ try:
330
+ await self._listening_task
331
+ except asyncio.CancelledError:
332
+ pass
333
+ self._listening_task = None
334
+
335
+ if self._websocket_connection and self._websocket_connection.state == State.OPEN:
336
+ try:
337
+ await self._websocket_connection.close()
338
+ except Exception as e:
339
+ logger.error(f"Error closing WebSocket connection: {e}")
340
+ finally:
341
+ logger.debug("Disconnected from Sarvam WebSocket")
342
+ self._websocket_connection = None
343
+ self._websocket = None
344
+
345
+ async def _listen_for_messages(self):
346
+ """Listen for messages from Sarvam WebSocket."""
347
+ try:
348
+ while self._websocket_connection and self._websocket_connection.state == State.OPEN:
349
+ try:
350
+ message = await self._websocket_connection.recv()
351
+ response = json.loads(message)
352
+ await self._handle_response(response)
353
+
354
+ except websockets.exceptions.ConnectionClosed:
355
+ logger.warning("WebSocket connection closed")
356
+ break
357
+ except json.JSONDecodeError as e:
358
+ logger.error(f"Failed to parse JSON response: {e}")
359
+ continue
360
+ except Exception as e:
361
+ logger.error(f"Error receiving message from Sarvam: {e}")
362
+ break
363
+
364
+ except asyncio.CancelledError:
365
+ logger.debug("Message listening cancelled")
366
+ except Exception as e:
367
+ logger.error(f"Unexpected error in message listener: {e}")
368
+ await self.push_error(ErrorFrame(f"Message listener error: {e}"))
369
+
370
+ async def _handle_response(self, response):
371
+ """Handle transcription response from Sarvam.
372
+
373
+ Args:
374
+ response: The response object from Sarvam WebSocket.
375
+ """
376
+ logger.debug(f"Received response: {response}")
377
+
378
+ try:
379
+ if response["type"] == "error":
380
+ error_msg = response.get("data", {}).get("message", "Unknown error")
381
+ logger.error(f"Sarvam API error: {error_msg}")
382
+ await self.push_error(ErrorFrame(f"Sarvam API error: {error_msg}"))
383
+ # Close connection on error
384
+ await self._disconnect()
385
+ return
386
+
387
+ if response["type"] == "events":
388
+ parsed = EventResponse(**response)
389
+ signal = parsed.data.signal_type
390
+ timestamp = parsed.data.occured_at
391
+ logger.debug(f"VAD Signal: {signal}, Occurred at: {timestamp}")
392
+
393
+ if signal == VADSignal.START:
394
+ await self.start_metrics()
395
+ logger.debug("User started speaking")
396
+ await self._call_event_handler("on_speech_started")
397
+ elif signal == VADSignal.END:
398
+ logger.debug("User stopped speaking")
399
+ await self._call_event_handler("on_speech_ended")
400
+
401
+ elif response["type"] == "data":
402
+ await self.stop_ttfb_metrics()
403
+ parsed = TranscriptionResponse(**response)
404
+ transcript = parsed.data.transcript
405
+ language_code = parsed.data.language_code
406
+ if language_code is None:
407
+ language_code = "hi-IN"
408
+ language = self._map_language_code_to_enum(language_code)
409
+
410
+ if transcript and transcript.strip():
411
+ await self.push_frame(
412
+ TranscriptionFrame(
413
+ transcript,
414
+ self._user_id,
415
+ time_now_iso8601(),
416
+ language,
417
+ result=response,
418
+ )
419
+ )
420
+
421
+ await self.stop_processing_metrics()
422
+
423
+ except Exception as e:
424
+ logger.error(f"Error handling Sarvam response: {e}")
425
+ await self.push_error(ErrorFrame(f"Failed to handle response: {e}"))
426
+
427
+ def _map_language_code_to_enum(self, language_code: str) -> Language:
428
+ """Map Sarvam language code (e.g., "hi-IN") to pipecat Language enum."""
429
+ logger.debug(f"Audio language detected as: {language_code}")
430
+ mapping = {
431
+ "bn-IN": Language.BN_IN,
432
+ "gu-IN": Language.GU_IN,
433
+ "hi-IN": Language.HI_IN,
434
+ "kn-IN": Language.KN_IN,
435
+ "ml-IN": Language.ML_IN,
436
+ "mr-IN": Language.MR_IN,
437
+ "ta-IN": Language.TA_IN,
438
+ "te-IN": Language.TE_IN,
439
+ "pa-IN": Language.PA_IN,
440
+ "od-IN": Language.OR_IN,
441
+ "en-US": Language.EN_US,
442
+ "en-IN": Language.EN_IN,
443
+ "as-IN": Language.AS_IN,
444
+ }
445
+ return mapping.get(language_code, Language.HI_IN)
446
+
447
+ async def start_metrics(self):
448
+ """Start TTFB and processing metrics collection."""
449
+ await self.start_ttfb_metrics()
450
+ await self.start_processing_metrics()
@@ -1,8 +0,0 @@
1
- #
2
- # Copyright (c) 2024–2025, Daily
3
- #
4
- # SPDX-License-Identifier: BSD 2-Clause License
5
- #
6
-
7
-
8
- from .tts import *