dv-pipecat-ai 0.0.82.dev43__tar.gz → 0.0.82.dev49__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 (461) hide show
  1. dv_pipecat_ai-0.0.82.dev49/.github/workflows/github.yml +414 -0
  2. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/PKG-INFO +1 -1
  3. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/dv_pipecat_ai.egg-info/PKG-INFO +1 -1
  4. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/dv_pipecat_ai.egg-info/SOURCES.txt +1 -0
  5. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/frames/frames.py +11 -0
  6. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/dtmf_aggregator.py +22 -29
  7. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/dtmf_aggregator.py +60 -0
  8. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/__init__.py +3 -1
  9. dv_pipecat_ai-0.0.82.dev49/src/pipecat/serializers/custom.py +245 -0
  10. dv_pipecat_ai-0.0.82.dev43/.github/workflows/github.yml +0 -511
  11. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.dockerignore +0 -0
  12. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
  13. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
  14. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
  15. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
  16. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
  17. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
  18. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
  19. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  20. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  21. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/build.yaml +0 -0
  22. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/coverage.yaml +0 -0
  23. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/format.yaml +0 -0
  24. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/promote-prod.yml +0 -0
  25. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/publish.yaml +0 -0
  26. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/publish_test.yaml +0 -0
  27. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/python-compatibility.yaml +0 -0
  28. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/set-traffic-split.yml +0 -0
  29. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/sync-quickstart.yaml +0 -0
  30. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.github/workflows/tests.yaml +0 -0
  31. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.gitignore +0 -0
  32. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.pre-commit-config.yaml +0 -0
  33. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/.readthedocs.yaml +0 -0
  34. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/CHANGELOG.md +0 -0
  35. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/CHANGELOG.md.template +0 -0
  36. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/CLAUDE.md +0 -0
  37. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/CONTRIBUTING.md +0 -0
  38. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/DOCKER_BUILD_OPTIMIZATION_SUMMARY.md +0 -0
  39. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/LICENSE +0 -0
  40. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/MANIFEST.in +0 -0
  41. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/README.md +0 -0
  42. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/ansible.cfg +0 -0
  43. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/ansible_deployment.sh +0 -0
  44. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/cleanup_old_containers.yml +0 -0
  45. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/codecov.yml +0 -0
  46. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/create-new-machine/ansible.cfg +0 -0
  47. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/create-new-machine/ansible_setup.sh +0 -0
  48. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/create-new-machine/inventory.ini +0 -0
  49. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/create-new-machine/replace_env.yml +0 -0
  50. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/create-new-machine/setup_playbook.yml +0 -0
  51. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/create_inventory.py +0 -0
  52. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/delete_old_dockers.sh +0 -0
  53. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/deploy.sh +0 -0
  54. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/deploy_playbook.yml +0 -0
  55. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/docker-compose.dev.yml +0 -0
  56. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/dump_logs.yml +0 -0
  57. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/env.example +0 -0
  58. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/fetch_logs.yml +0 -0
  59. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/inventory.ini +0 -0
  60. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/.helmignore +0 -0
  61. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/Chart.yaml +0 -0
  62. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
  63. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
  64. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/cluster-role.yaml +0 -0
  65. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
  66. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
  67. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
  68. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/keda-api-key-secret.yaml +0 -0
  69. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/keda-scaledobject.yaml +0 -0
  70. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/keda-trigger-auth.yaml +0 -0
  71. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/pdb.yaml +0 -0
  72. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/templates/service.yaml +0 -0
  73. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/values-canary.yaml +0 -0
  74. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/values-prod.yaml +0 -0
  75. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/values-stage.yaml +0 -0
  76. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/dv-pipecat/values.yaml +0 -0
  77. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/k8s/istio/destination-virtualservice.yaml +0 -0
  78. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/merge-code-into-single-file.sh +0 -0
  79. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/pipecat.png +0 -0
  80. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/pyproject.toml +0 -0
  81. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/restart.sh +0 -0
  82. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/restart_playbook.yml +0 -0
  83. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/setup.cfg +0 -0
  84. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
  85. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/dv_pipecat_ai.egg-info/requires.txt +0 -0
  86. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
  87. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/__init__.py +0 -0
  88. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/__init__.py +0 -0
  89. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/base_llm_adapter.py +0 -0
  90. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/schemas/__init__.py +0 -0
  91. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/schemas/direct_function.py +0 -0
  92. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/schemas/function_schema.py +0 -0
  93. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
  94. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/services/__init__.py +0 -0
  95. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
  96. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
  97. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
  98. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
  99. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
  100. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
  101. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/__init__.py +0 -0
  102. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/__init__.py +0 -0
  103. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-0.wav +0 -0
  104. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-1.wav +0 -0
  105. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-2.wav +0 -0
  106. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-3.wav +0 -0
  107. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-4.wav +0 -0
  108. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-5.wav +0 -0
  109. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-6.wav +0 -0
  110. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-7.wav +0 -0
  111. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-8.wav +0 -0
  112. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-9.wav +0 -0
  113. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-pound.wav +0 -0
  114. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/dtmf-star.wav +0 -0
  115. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/types.py +0 -0
  116. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/dtmf/utils.py +0 -0
  117. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/filters/__init__.py +0 -0
  118. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/filters/aic_filter.py +0 -0
  119. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
  120. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/filters/koala_filter.py +0 -0
  121. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/filters/krisp_filter.py +0 -0
  122. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
  123. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/filters/pyrnn_local_filter.py +0 -0
  124. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/interruptions/__init__.py +0 -0
  125. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
  126. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
  127. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/mixers/__init__.py +0 -0
  128. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
  129. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
  130. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/resamplers/__init__.py +0 -0
  131. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
  132. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
  133. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
  134. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/resamplers/soxr_stream_resampler.py +0 -0
  135. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/__init__.py +0 -0
  136. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
  137. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
  138. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
  139. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
  140. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
  141. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
  142. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
  143. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v2.py +0 -0
  144. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/utils.py +0 -0
  145. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/vad/__init__.py +0 -0
  146. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/vad/data/__init__.py +0 -0
  147. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
  148. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/vad/data/silero_vad_v2.onnx +0 -0
  149. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/vad/silero.py +0 -0
  150. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
  151. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/clocks/__init__.py +0 -0
  152. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/clocks/base_clock.py +0 -0
  153. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/clocks/system_clock.py +0 -0
  154. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/extensions/__init__.py +0 -0
  155. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/extensions/ivr/__init__.py +0 -0
  156. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/extensions/ivr/ivr_navigator.py +0 -0
  157. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/extensions/voicemail/__init__.py +0 -0
  158. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/extensions/voicemail/voicemail_detector.py +0 -0
  159. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/frames/__init__.py +0 -0
  160. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/frames/frames.proto +0 -0
  161. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
  162. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/metrics/__init__.py +0 -0
  163. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/metrics/metrics.py +0 -0
  164. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/__init__.py +0 -0
  165. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/base_observer.py +0 -0
  166. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/loggers/__init__.py +0 -0
  167. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
  168. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
  169. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
  170. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
  171. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/observers/turn_tracking_observer.py +0 -0
  172. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/__init__.py +0 -0
  173. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/base_pipeline.py +0 -0
  174. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/base_task.py +0 -0
  175. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/llm_switcher.py +0 -0
  176. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
  177. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/pipeline.py +0 -0
  178. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/runner.py +0 -0
  179. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/service_switcher.py +0 -0
  180. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
  181. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/task.py +0 -0
  182. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/task_observer.py +0 -0
  183. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
  184. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/__init__.py +0 -0
  185. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/__init__.py +0 -0
  186. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/gated.py +0 -0
  187. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/gated_openai_llm_context.py +0 -0
  188. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/llm_context.py +0 -0
  189. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/llm_response.py +0 -0
  190. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/llm_response_universal.py +0 -0
  191. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
  192. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/sentence.py +0 -0
  193. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/user_response.py +0 -0
  194. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
  195. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/async_generator.py +0 -0
  196. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/audio/__init__.py +0 -0
  197. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
  198. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/consumer_processor.py +0 -0
  199. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/__init__.py +0 -0
  200. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/frame_filter.py +0 -0
  201. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/function_filter.py +0 -0
  202. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/identity_filter.py +0 -0
  203. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/null_filter.py +0 -0
  204. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
  205. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
  206. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
  207. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/frame_processor.py +0 -0
  208. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/frameworks/__init__.py +0 -0
  209. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/frameworks/langchain.py +0 -0
  210. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/frameworks/rtvi.py +0 -0
  211. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/gstreamer/__init__.py +0 -0
  212. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
  213. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/idle_frame_processor.py +0 -0
  214. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/logger.py +0 -0
  215. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/metrics/__init__.py +0 -0
  216. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/metrics/frame_processor_metrics.py +0 -0
  217. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/metrics/sentry.py +0 -0
  218. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/producer_processor.py +0 -0
  219. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/text_transformer.py +0 -0
  220. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/transcript_processor.py +0 -0
  221. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
  222. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/processors/user_idle_processor.py +0 -0
  223. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/py.typed +0 -0
  224. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/runner/__init__.py +0 -0
  225. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/runner/daily.py +0 -0
  226. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/runner/livekit.py +0 -0
  227. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/runner/run.py +0 -0
  228. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/runner/types.py +0 -0
  229. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/runner/utils.py +0 -0
  230. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/asterisk.py +0 -0
  231. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/base_serializer.py +0 -0
  232. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/convox.py +0 -0
  233. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/exotel.py +0 -0
  234. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/livekit.py +0 -0
  235. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/plivo.py +0 -0
  236. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/protobuf.py +0 -0
  237. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/telnyx.py +0 -0
  238. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/serializers/twilio.py +0 -0
  239. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/__init__.py +0 -0
  240. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/ai_service.py +0 -0
  241. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/ai_services.py +0 -0
  242. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/anthropic/__init__.py +0 -0
  243. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/anthropic/llm.py +0 -0
  244. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/assemblyai/__init__.py +0 -0
  245. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/assemblyai/models.py +0 -0
  246. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/assemblyai/stt.py +0 -0
  247. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/asyncai/__init__.py +0 -0
  248. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/asyncai/tts.py +0 -0
  249. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws/__init__.py +0 -0
  250. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws/llm.py +0 -0
  251. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws/stt.py +0 -0
  252. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws/tts.py +0 -0
  253. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws/utils.py +0 -0
  254. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
  255. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
  256. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
  257. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
  258. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/aws_nova_sonic/ready.wav +0 -0
  259. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/azure/__init__.py +0 -0
  260. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/azure/common.py +0 -0
  261. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/azure/image.py +0 -0
  262. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/azure/llm.py +0 -0
  263. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/azure/stt.py +0 -0
  264. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/azure/tts.py +0 -0
  265. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/cartesia/__init__.py +0 -0
  266. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/cartesia/stt.py +0 -0
  267. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/cartesia/tts.py +0 -0
  268. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/cerebras/__init__.py +0 -0
  269. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/cerebras/llm.py +0 -0
  270. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/deepgram/__init__.py +0 -0
  271. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/deepgram/stt.py +0 -0
  272. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/deepgram/tts.py +0 -0
  273. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/deepseek/__init__.py +0 -0
  274. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/deepseek/llm.py +0 -0
  275. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/elevenlabs/__init__.py +0 -0
  276. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/elevenlabs/stt.py +0 -0
  277. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/elevenlabs/tts.py +0 -0
  278. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/fal/__init__.py +0 -0
  279. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/fal/image.py +0 -0
  280. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/fal/stt.py +0 -0
  281. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/fireworks/__init__.py +0 -0
  282. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/fireworks/llm.py +0 -0
  283. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/fish/__init__.py +0 -0
  284. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/fish/tts.py +0 -0
  285. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
  286. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
  287. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/gemini_multimodal_live/file_api.py +0 -0
  288. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
  289. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/gladia/__init__.py +0 -0
  290. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/gladia/config.py +0 -0
  291. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/gladia/stt.py +0 -0
  292. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/__init__.py +0 -0
  293. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/frames.py +0 -0
  294. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/google.py +0 -0
  295. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/image.py +0 -0
  296. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/llm.py +0 -0
  297. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/llm_openai.py +0 -0
  298. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/llm_vertex.py +0 -0
  299. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/rtvi.py +0 -0
  300. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/stt.py +0 -0
  301. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/google/tts.py +0 -0
  302. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/grok/__init__.py +0 -0
  303. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/grok/llm.py +0 -0
  304. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/groq/__init__.py +0 -0
  305. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/groq/llm.py +0 -0
  306. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/groq/stt.py +0 -0
  307. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/groq/tts.py +0 -0
  308. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/hamsa/__init__.py +0 -0
  309. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/hamsa/stt.py +0 -0
  310. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/heygen/__init__.py +0 -0
  311. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/heygen/api.py +0 -0
  312. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/heygen/client.py +0 -0
  313. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/heygen/video.py +0 -0
  314. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/image_service.py +0 -0
  315. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/inworld/__init__.py +0 -0
  316. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/inworld/tts.py +0 -0
  317. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/llm_service.py +0 -0
  318. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/lmnt/__init__.py +0 -0
  319. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/lmnt/tts.py +0 -0
  320. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/mcp_service.py +0 -0
  321. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/mem0/__init__.py +0 -0
  322. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/mem0/memory.py +0 -0
  323. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/minimax/__init__.py +0 -0
  324. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/minimax/tts.py +0 -0
  325. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/mistral/__init__.py +0 -0
  326. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/mistral/llm.py +0 -0
  327. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/moondream/__init__.py +0 -0
  328. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/moondream/vision.py +0 -0
  329. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/neuphonic/__init__.py +0 -0
  330. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/neuphonic/tts.py +0 -0
  331. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/nim/__init__.py +0 -0
  332. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/nim/llm.py +0 -0
  333. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/ollama/__init__.py +0 -0
  334. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/ollama/llm.py +0 -0
  335. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai/__init__.py +0 -0
  336. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai/base_llm.py +0 -0
  337. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai/image.py +0 -0
  338. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai/llm.py +0 -0
  339. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai/stt.py +0 -0
  340. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai/tts.py +0 -0
  341. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
  342. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
  343. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
  344. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
  345. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
  346. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
  347. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openpipe/__init__.py +0 -0
  348. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openpipe/llm.py +0 -0
  349. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openrouter/__init__.py +0 -0
  350. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/openrouter/llm.py +0 -0
  351. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/perplexity/__init__.py +0 -0
  352. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/perplexity/llm.py +0 -0
  353. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/piper/__init__.py +0 -0
  354. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/piper/tts.py +0 -0
  355. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/playht/__init__.py +0 -0
  356. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/playht/tts.py +0 -0
  357. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/qwen/__init__.py +0 -0
  358. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/qwen/llm.py +0 -0
  359. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/rime/__init__.py +0 -0
  360. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/rime/tts.py +0 -0
  361. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/riva/__init__.py +0 -0
  362. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/riva/stt.py +0 -0
  363. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/riva/tts.py +0 -0
  364. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/sambanova/__init__.py +0 -0
  365. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/sambanova/llm.py +0 -0
  366. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/sambanova/stt.py +0 -0
  367. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/sarvam/__init__.py +0 -0
  368. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/sarvam/tts.py +0 -0
  369. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/simli/__init__.py +0 -0
  370. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/simli/video.py +0 -0
  371. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/soniox/__init__.py +0 -0
  372. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/soniox/stt.py +0 -0
  373. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/speechmatics/__init__.py +0 -0
  374. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/speechmatics/stt.py +0 -0
  375. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/stt_service.py +0 -0
  376. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/tavus/__init__.py +0 -0
  377. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/tavus/video.py +0 -0
  378. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/together/__init__.py +0 -0
  379. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/together/llm.py +0 -0
  380. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/tts_service.py +0 -0
  381. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/ultravox/__init__.py +0 -0
  382. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/ultravox/stt.py +0 -0
  383. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/vision_service.py +0 -0
  384. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/vistaar/__init__.py +0 -0
  385. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/vistaar/llm.py +0 -0
  386. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/websocket_service.py +0 -0
  387. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/whisper/__init__.py +0 -0
  388. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/whisper/base_stt.py +0 -0
  389. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/whisper/stt.py +0 -0
  390. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/xtts/__init__.py +0 -0
  391. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/services/xtts/tts.py +0 -0
  392. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/sync/__init__.py +0 -0
  393. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/sync/base_notifier.py +0 -0
  394. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/sync/event_notifier.py +0 -0
  395. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/tests/__init__.py +0 -0
  396. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/tests/utils.py +0 -0
  397. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transcriptions/__init__.py +0 -0
  398. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transcriptions/language.py +0 -0
  399. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/__init__.py +0 -0
  400. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/base_input.py +0 -0
  401. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/base_output.py +0 -0
  402. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/base_transport.py +0 -0
  403. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/daily/__init__.py +0 -0
  404. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/daily/transport.py +0 -0
  405. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/daily/utils.py +0 -0
  406. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/livekit/__init__.py +0 -0
  407. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/livekit/transport.py +0 -0
  408. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/local/__init__.py +0 -0
  409. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/local/audio.py +0 -0
  410. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/local/tk.py +0 -0
  411. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/network/__init__.py +0 -0
  412. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/network/fastapi_websocket.py +0 -0
  413. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/network/small_webrtc.py +0 -0
  414. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/network/webrtc_connection.py +0 -0
  415. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/network/websocket_client.py +0 -0
  416. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/network/websocket_server.py +0 -0
  417. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/services/__init__.py +0 -0
  418. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/services/daily.py +0 -0
  419. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/services/helpers/__init__.py +0 -0
  420. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
  421. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/services/livekit.py +0 -0
  422. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/services/tavus.py +0 -0
  423. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/smallwebrtc/__init__.py +0 -0
  424. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/smallwebrtc/connection.py +0 -0
  425. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/smallwebrtc/transport.py +0 -0
  426. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/tavus/__init__.py +0 -0
  427. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/tavus/transport.py +0 -0
  428. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/websocket/__init__.py +0 -0
  429. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/websocket/client.py +0 -0
  430. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/websocket/fastapi.py +0 -0
  431. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/websocket/server.py +0 -0
  432. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/whatsapp/__init__.py +0 -0
  433. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/whatsapp/api.py +0 -0
  434. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/transports/whatsapp/client.py +0 -0
  435. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/__init__.py +0 -0
  436. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/asyncio/__init__.py +0 -0
  437. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/asyncio/task_manager.py +0 -0
  438. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/base_object.py +0 -0
  439. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/logger_config.py +0 -0
  440. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/network.py +0 -0
  441. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/string.py +0 -0
  442. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/text/__init__.py +0 -0
  443. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
  444. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/text/base_text_filter.py +0 -0
  445. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
  446. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
  447. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
  448. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
  449. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/time.py +0 -0
  450. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/__init__.py +0 -0
  451. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/class_decorators.py +0 -0
  452. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
  453. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/service_attributes.py +0 -0
  454. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/service_decorators.py +0 -0
  455. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/setup.py +0 -0
  456. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
  457. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
  458. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/src/pipecat/utils/utils.py +0 -0
  459. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/stop_container.yml +0 -0
  460. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/test_elevenlabs_stt_segmented.py +0 -0
  461. {dv_pipecat_ai-0.0.82.dev43 → dv_pipecat_ai-0.0.82.dev49}/uv.lock +0 -0
@@ -0,0 +1,414 @@
1
+ name: Build and Deploy to Kubernetes
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - dv-stage # Trigger only on pushes to this specific branch.
7
+ - dv-main
8
+ - test/deployment_cache
9
+
10
+ env:
11
+ PROJECT_ID: desivocalprod01
12
+ REGION: asia-south1
13
+ REPOSITORY: ${{ github.ref == 'refs/heads/dv-main' && 'ringg-registry-prod' || 'ringg-registry-stage' }}
14
+ IMAGE_NAME: dv-pipecat
15
+ # Determine cluster and secrets based on the target branch (dv-main for prod, others for stage)
16
+ CLUSTER: ${{ github.ref == 'refs/heads/dv-main' && 'desivocal-prod-us-e1-cluster' || 'desivocal-staging-cluster' }}
17
+ CLUSTER_ZONE: ${{ github.ref == 'refs/heads/dv-main' && 'us-east1' || 'asia-south1-a' }}
18
+ GITHUB_SHA: ${{ github.sha }}
19
+ # Assuming secrets are named like PROD_SECRETS_JSON / STAGE_SECRETS_JSON etc.
20
+ # SECRETS_JSON should contain a JSON object like {"VAR1": "value1", "VAR2": "value2"}
21
+ SECRETS_JSON: ${{ github.ref == 'refs/heads/dv-main' && secrets.PROD_SECRETS_JSON || secrets.STAGE_SECRETS_JSON }}
22
+ # CREDS_JSON should contain the raw content of the creds.json file
23
+ CREDS_JSON: ${{ github.ref == 'refs/heads/dv-main' && secrets.PROD_CREDS_JSON || secrets.STAGE_CREDS_JSON }}
24
+ # Helm release name
25
+ HELM_RELEASE_NAME: dv-pipecat
26
+
27
+ jobs:
28
+ build-and-deploy:
29
+ # Skip dv-stage runs that are only the auto-bump commit we just pushed
30
+ if: github.ref != 'refs/heads/dv-stage' || !contains(github.event.head_commit.message, 'Auto-bump dv-pipecat-ai')
31
+ runs-on: ubuntu-latest
32
+ permissions:
33
+ contents: write
34
+ id-token: write # Required for Workload Identity Federation
35
+
36
+ steps:
37
+ - name: Checkout code
38
+ uses: actions/checkout@v4
39
+ with:
40
+ ref: ${{ github.ref }}
41
+ fetch-depth: 0
42
+
43
+ # Integrated smart auto-release logic (moved from smart-auto-release.yml)
44
+ - name: Set up Python
45
+ uses: actions/setup-python@v4
46
+ with:
47
+ python-version: '3.10'
48
+
49
+ - name: Install build tooling
50
+ if: github.ref == 'refs/heads/dv-stage'
51
+ run: |
52
+ python -m pip install --upgrade pip
53
+ pip install build requests packaging
54
+
55
+ - name: Check for src/pipecat changes (push diff)
56
+ if: github.ref == 'refs/heads/dv-stage'
57
+ id: check_changes
58
+ run: |
59
+ echo "Checking for changes in src/pipecat between ${{ github.event.before }} and ${{ github.sha }}..."
60
+ if git diff --name-only ${{ github.event.before }}..${{ github.sha }} | grep -q "^src/pipecat"; then
61
+ echo "has_pipecat_changes=true" >> $GITHUB_OUTPUT
62
+ echo "✅ Found changes in src/pipecat"
63
+ else
64
+ echo "has_pipecat_changes=false" >> $GITHUB_OUTPUT
65
+ echo "ℹ️ No changes in src/pipecat detected"
66
+ fi
67
+
68
+ - name: Get dv-pipecat-ai versions (before vs after)
69
+ if: github.ref == 'refs/heads/dv-stage' && steps.check_changes.outputs.has_pipecat_changes == 'true'
70
+ id: versions
71
+ env:
72
+ REQUIREMENTS_FILE: examples/ringg-chatbot/remote-requirements.txt
73
+ PACKAGE_NAME: dv-pipecat-ai
74
+ run: |
75
+ echo "Getting current and previous ${PACKAGE_NAME} versions from ${REQUIREMENTS_FILE}..."
76
+
77
+ # Current merged version (after)
78
+ if [ -f "$REQUIREMENTS_FILE" ]; then
79
+ MERGED_REQUIREMENTS_VERSION=$(grep "${PACKAGE_NAME}" "$REQUIREMENTS_FILE" | sed -n 's/.*==\([^]]*\).*/\1/p')
80
+ fi
81
+ if [ -z "$MERGED_REQUIREMENTS_VERSION" ]; then
82
+ MERGED_REQUIREMENTS_VERSION="0.0.0.dev0"
83
+ fi
84
+ echo "merged_requirements_version=$MERGED_REQUIREMENTS_VERSION" >> $GITHUB_OUTPUT
85
+
86
+ # Previous version (before)
87
+ git show ${{ github.event.before }}:"$REQUIREMENTS_FILE" > before_requirements.txt 2>/dev/null || echo "${PACKAGE_NAME}==0.0.0.dev0" > before_requirements.txt
88
+ BASE_REQUIREMENTS_VERSION=$(grep "${PACKAGE_NAME}" before_requirements.txt | sed -n 's/.*==\([^]]*\).*/\1/p')
89
+ if [ -z "$BASE_REQUIREMENTS_VERSION" ]; then
90
+ BASE_REQUIREMENTS_VERSION="0.0.0.dev0"
91
+ fi
92
+ echo "base_requirements_version=$BASE_REQUIREMENTS_VERSION" >> $GITHUB_OUTPUT
93
+
94
+ echo "📊 Version Status:"
95
+ echo " Base (before) requirements version: $BASE_REQUIREMENTS_VERSION"
96
+ echo " Merged (after) requirements version: $MERGED_REQUIREMENTS_VERSION"
97
+
98
+ - name: Decide auto-release action
99
+ if: github.ref == 'refs/heads/dv-stage' && steps.check_changes.outputs.has_pipecat_changes == 'true'
100
+ id: decision
101
+ run: |
102
+ BASE_VERSION="${{ steps.versions.outputs.base_requirements_version }}"
103
+ MERGED_VERSION="${{ steps.versions.outputs.merged_requirements_version }}"
104
+
105
+ echo "🤔 Decision Logic:"
106
+ echo " Base version: $BASE_VERSION"
107
+ echo " Merged version: $MERGED_VERSION"
108
+
109
+ if [ "$BASE_VERSION" = "$MERGED_VERSION" ]; then
110
+ echo "should_release=true" >> $GITHUB_OUTPUT
111
+ echo "reason=Versions match between before/after - auto-bump needed" >> $GITHUB_OUTPUT
112
+ echo "✅ Decision: AUTO-RELEASE"
113
+ else
114
+ echo "should_release=false" >> $GITHUB_OUTPUT
115
+ echo "reason=Version already changed in the merge" >> $GITHUB_OUTPUT
116
+ echo "⏭️ Decision: SKIP (developer updated version)"
117
+ fi
118
+
119
+ - name: Build package (setuptools_scm)
120
+ if: github.ref == 'refs/heads/dv-stage' && steps.decision.outputs.should_release == 'true'
121
+ run: |
122
+ echo "🔨 Building package..."
123
+ python -m build
124
+ ls -la dist/
125
+
126
+ - name: Extract built version
127
+ if: github.ref == 'refs/heads/dv-stage' && steps.decision.outputs.should_release == 'true'
128
+ id: extract_version
129
+ run: |
130
+ WHEEL_FILE=$(ls dist/*.whl | head -1)
131
+ BUILT_VERSION=$(echo "$WHEEL_FILE" | sed -E 's/.*-([0-9]+\.[0-9]+\.[0-9]+\.dev[0-9]+)-.*/\1/')
132
+ echo "built_version=$BUILT_VERSION" >> $GITHUB_OUTPUT
133
+ echo "🔍 Built version: $BUILT_VERSION"
134
+ # Verify tar.gz matches
135
+ TAR_FILE=$(ls dist/*.tar.gz | head -1)
136
+ TAR_VERSION=$(echo "$TAR_FILE" | sed -E 's/.*-([0-9]+\.[0-9]+\.[0-9]+\.dev[0-9]+)\.tar\.gz/\1/')
137
+ [ "$BUILT_VERSION" = "$TAR_VERSION" ] || { echo "❌ Version mismatch"; exit 1; }
138
+
139
+ - name: Publish to PyPI
140
+ if: github.ref == 'refs/heads/dv-stage' && steps.decision.outputs.should_release == 'true'
141
+ uses: pypa/gh-action-pypi-publish@release/v1
142
+ with:
143
+ password: ${{ secrets.PYPI_API_TOKEN }}
144
+ print-hash: true
145
+ verbose: true
146
+
147
+ # - name: Update remote-requirements.txt with built version and push
148
+ # if: github.ref == 'refs/heads/dv-stage' && steps.decision.outputs.should_release == 'true'
149
+ # env:
150
+ # REQUIREMENTS_FILE: examples/ringg-chatbot/remote-requirements.txt
151
+ # PACKAGE_NAME: dv-pipecat-ai
152
+ # run: |
153
+ # BUILT_VERSION="${{ steps.extract_version.outputs.built_version }}"
154
+ # echo "📝 Updating ${REQUIREMENTS_FILE} to ${PACKAGE_NAME}==${BUILT_VERSION} (preserve extras)"
155
+ # CURRENT_DEPS=$(grep "${PACKAGE_NAME}" "$REQUIREMENTS_FILE" | sed -n 's/.*\[\([^]]*\)\].*/\1/p')
156
+ # if [ -z "$CURRENT_DEPS" ]; then
157
+ # # No extras bracket found; keep line format simple
158
+ # sed -i.bak "s/${PACKAGE_NAME}==.*/${PACKAGE_NAME}==${BUILT_VERSION}/" "$REQUIREMENTS_FILE"
159
+ # else
160
+ # sed -i.bak "s/${PACKAGE_NAME}\[.*\]==.*/${PACKAGE_NAME}[$CURRENT_DEPS]==${BUILT_VERSION}/" "$REQUIREMENTS_FILE"
161
+ # fi
162
+ # grep "${PACKAGE_NAME}" "$REQUIREMENTS_FILE"
163
+
164
+ # git config --local user.email "action@github.com"
165
+ # git config --local user.name "GitHub Action"
166
+ # git add "$REQUIREMENTS_FILE"
167
+ # git commit -m "🤖 Auto-bump ${PACKAGE_NAME} to ${BUILT_VERSION}"
168
+ # git push origin HEAD:dv-stage
169
+
170
+ # - name: Log auto-release skip reason
171
+ # if: github.ref == 'refs/heads/dv-stage' && (steps.check_changes.outputs.has_pipecat_changes == 'false' || steps.decision.outputs.should_release == 'false')
172
+ # run: |
173
+ # if [ "${{ steps.check_changes.outputs.has_pipecat_changes }}" = "false" ]; then
174
+ # echo "⏭️ SKIPPING auto-release: No src/pipecat changes detected"
175
+ # else
176
+ # echo "⏭️ SKIPPING auto-release: ${{ steps.decision.outputs.reason }}"
177
+ # fi
178
+
179
+ # # Python already set up above
180
+
181
+ # - name: Install Python dependencies
182
+ # run: |
183
+ # python -m pip install --upgrade pip
184
+ # pip install requests packaging
185
+
186
+ # - name: Verify PyPI package availability
187
+ # run: |
188
+ # echo "🔍 Verifying PyPI package availability..."
189
+
190
+ # # Get version from remote-requirements.txt
191
+ # PIPECAT_VERSION=$(grep "dv-pipecat-ai" examples/ringg-chatbot/remote-requirements.txt | sed -n 's/.*==\([^]]*\).*/\1/p')
192
+ # echo "📦 Required pipecat version: $PIPECAT_VERSION"
193
+
194
+ # # Verify package is available on PyPI with retry logic
195
+ # MAX_ATTEMPTS=12
196
+ # ATTEMPT=1
197
+ # WAIT_TIME=5
198
+ # PACKAGE_AVAILABLE=false
199
+
200
+ # while [ $ATTEMPT -le $MAX_ATTEMPTS ]; do
201
+ # echo "🔍 Attempt $ATTEMPT/$MAX_ATTEMPTS: Checking PyPI for dv-pipecat-ai==$PIPECAT_VERSION"
202
+
203
+ # if python scripts/check-pypi-package.py dv-pipecat-ai "$PIPECAT_VERSION"; then
204
+ # PACKAGE_AVAILABLE=true
205
+ # echo "✅ PyPI package verification successful!"
206
+ # break
207
+ # else
208
+ # if [ $ATTEMPT -eq $MAX_ATTEMPTS ]; then
209
+ # echo "❌ FAILED: Package dv-pipecat-ai==$PIPECAT_VERSION not available on PyPI after $MAX_ATTEMPTS attempts"
210
+ # echo "🚨 This usually means:"
211
+ # echo " 1. The auto-release workflow failed to publish"
212
+ # echo " 2. PyPI is experiencing delays"
213
+ # echo " 3. Version mismatch between requirements.txt and PyPI"
214
+ # exit 1
215
+ # else
216
+ # echo "⏳ Package not yet available, waiting ${WAIT_TIME}s before retry..."
217
+ # sleep $WAIT_TIME
218
+ # # Exponential backoff with cap at 30s
219
+ # if [ $WAIT_TIME -lt 30 ]; then
220
+ # WAIT_TIME=$((WAIT_TIME * 2))
221
+ # if [ $WAIT_TIME -gt 30 ]; then WAIT_TIME=30; fi
222
+ # fi
223
+ # fi
224
+ # fi
225
+ # ATTEMPT=$((ATTEMPT + 1))
226
+ # done
227
+
228
+ # echo "PIPECAT_VERSION=$PIPECAT_VERSION" >> $GITHUB_ENV
229
+
230
+ # - name: Authenticate to GCP using Workload Identity Federation
231
+ # id: auth
232
+ # uses: google-github-actions/auth@v2
233
+ # with:
234
+ # workload_identity_provider: projects/623676891410/locations/global/workloadIdentityPools/desivocal-staging-pool/providers/github # TODO: Update for production if needed
235
+ # service_account: gke-githubactions-svc-stage@desivocalprod01.iam.gserviceaccount.com # TODO: Update for production if needed
236
+
237
+ # - name: Configure gcloud
238
+ # run: |
239
+ # gcloud config set project $PROJECT_ID
240
+ # gcloud auth configure-docker $REGION-docker.pkg.dev --quiet
241
+
242
+ # - name: Set up Docker Buildx
243
+ # uses: docker/setup-buildx-action@v3
244
+
245
+ # - name: Build & push image (with GHA cache)
246
+ # uses: docker/build-push-action@v6
247
+ # with:
248
+ # context: ./examples/ringg-chatbot
249
+ # file: ./examples/ringg-chatbot/remote-Dockerfile
250
+ # platforms: linux/${{ github.ref == 'refs/heads/dv-main' && 'arm64' || 'amd64' }}
251
+ # push: true
252
+ # tags: ${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.IMAGE_NAME }}:${{ env.GITHUB_SHA }}
253
+ # cache-from: type=gha,scope=${{ github.ref == 'refs/heads/dv-main' && 'arm64' || 'amd64' }}
254
+ # cache-to: type=gha,mode=max,scope=${{ github.ref == 'refs/heads/dv-main' && 'arm64' || 'amd64' }}
255
+ # provenance: 'false'
256
+
257
+ # # - name: Build Docker image
258
+ # # run: |
259
+ # # cd examples/ringg-chatbot
260
+ # # docker build -t $REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME:$GITHUB_SHA -f remote-Dockerfile .
261
+
262
+ # # - name: Push Docker image to Artifact Registry
263
+ # # run: |
264
+ # # docker push $REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME:$GITHUB_SHA
265
+
266
+ # - name: Install Helm
267
+ # uses: azure/setup-helm@v4
268
+ # with:
269
+ # version: v3.13.3 # Specify Helm version if needed
270
+
271
+ # - name: Connect to GKE
272
+ # uses: google-github-actions/get-gke-credentials@v2
273
+ # with:
274
+ # cluster_name: ${{ env.CLUSTER }}
275
+ # location: ${{ env.CLUSTER_ZONE }}
276
+
277
+ # - name: Install KEDA (if not already installed)
278
+ # run: |
279
+ # echo "🔍 Checking if KEDA is already installed..."
280
+
281
+ # # Ensure KEDA Helm repository exists and is up-to-date for both install and upgrade paths
282
+ # if ! helm repo list | grep -q '^kedacore\s'; then
283
+ # helm repo add kedacore https://kedacore.github.io/charts
284
+ # else
285
+ # # Force update in case URL changed or local cache is stale
286
+ # helm repo add kedacore https://kedacore.github.io/charts --force-update
287
+ # fi
288
+ # helm repo update
289
+
290
+ # # Install KEDA if needed
291
+ # if ! kubectl get deployment -n keda keda-operator >/dev/null 2>&1; then
292
+ # echo "🚀 Installing KEDA core..."
293
+
294
+ # # Install KEDA core (required before HTTP add-on) with 30s HTTP timeout
295
+ # helm install keda kedacore/keda --namespace keda --create-namespace --wait --timeout=5m \
296
+ # --set operator.extraEnvs[0].name=KEDA_HTTP_DEFAULT_TIMEOUT \
297
+ # --set operator.extraEnvs[0].value="30000"
298
+
299
+ # echo "✅ KEDA core installation completed with 30s HTTP timeout"
300
+ # else
301
+ # echo "✅ KEDA core already installed"
302
+
303
+ # # Update existing KEDA installation to ensure HTTP timeout is set
304
+ # echo "🔄 Updating KEDA configuration to ensure 30s HTTP timeout..."
305
+ # helm upgrade keda kedacore/keda --namespace keda --reuse-values \
306
+ # --set operator.extraEnvs[0].name=KEDA_HTTP_DEFAULT_TIMEOUT \
307
+ # --set operator.extraEnvs[0].value="30000" \
308
+ # --wait --timeout=5m
309
+
310
+ # echo "✅ KEDA configuration updated with 30s HTTP timeout"
311
+ # fi
312
+
313
+ # # Verify KEDA CRDs are available
314
+ # echo "🔍 Verifying KEDA CRDs..."
315
+ # kubectl get crd | grep keda || {
316
+ # echo "❌ KEDA CRDs not found, waiting for them to be ready..."
317
+ # sleep 30
318
+ # kubectl get crd | grep keda || {
319
+ # echo "❌ KEDA CRDs still not available after waiting"
320
+ # exit 1
321
+ # }
322
+ # }
323
+
324
+ # echo "✅ KEDA is ready"
325
+
326
+ # - name: Install jq (for parsing JSON secrets)
327
+ # run: sudo apt-get update && sudo apt-get install -y jq
328
+
329
+ # - name: Create/Update GCP Credentials Secret
330
+ # run: |
331
+ # echo "Creating/Updating Kubernetes secret for GCP credentials..."
332
+ # # Create secret with creds.json key from CREDS_JSON content
333
+ # echo "$CREDS_JSON" | kubectl create secret generic ${{ env.HELM_RELEASE_NAME }}-gcp-creds --from-file=creds.json=/dev/stdin --dry-run=client -o yaml | kubectl apply -f - --overwrite
334
+ # env:
335
+ # CREDS_JSON: ${{ env.CREDS_JSON }}
336
+
337
+ # - name: Create/Update Application Secrets
338
+ # run: |
339
+ # echo "Creating/Updating Kubernetes secret for application environment variables..."
340
+ # # Build the --from-literal arguments dynamically from the JSON object stored in SECRETS_JSON
341
+ # # This creates one key in the secret for each key in the JSON, matching the file structure expected by read_secret
342
+ # LITERAL_ARGS=$(echo "$SECRETS_JSON" | jq -r 'to_entries | .[] | "--from-literal=\(.key)=\(.value)"' | tr '\n' ' ')
343
+ # if [ -z "$LITERAL_ARGS" ]; then
344
+ # echo "SECRETS_JSON is empty or not valid JSON. Skipping secret creation."
345
+ # # Handle error or create empty secret if absolutely required by envFrom (though optional should be fine)
346
+ # # kubectl create secret generic ${{ env.HELM_RELEASE_NAME }}-app-secrets --dry-run=client -o yaml | kubectl apply -f - --overwrite
347
+ # else
348
+ # kubectl create secret generic ${{ env.HELM_RELEASE_NAME }}-app-secrets $LITERAL_ARGS --dry-run=client -o yaml | kubectl apply -f - --overwrite
349
+ # fi
350
+ # env:
351
+ # SECRETS_JSON: ${{ env.SECRETS_JSON }}
352
+
353
+ # # Old code
354
+ # # - name: Deploy to GKE using Helm
355
+ # # run: |
356
+ # # if [ "${{ github.ref }}" == "refs/heads/dv-main" ]; then
357
+ # # VALUES_FILE="values-prod.yaml"
358
+ # # echo "Using production values: $VALUES_FILE"
359
+ # # else
360
+ # # VALUES_FILE="values-stage.yaml"
361
+ # # echo "Using staging values: $VALUES_FILE"
362
+ # # fi
363
+
364
+ # # helm upgrade --install ${{ env.HELM_RELEASE_NAME }} ./k8s/dv-pipecat \
365
+ # # --set image.repository=$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME \
366
+ # # --set image.tag=$GITHUB_SHA \
367
+ # # --namespace default \
368
+ # # -f ./k8s/dv-pipecat/$VALUES_FILE
369
+ # # ---------- DEPLOY ----------
370
+ # # 1) Deploy stage
371
+ # - name: Deploy stage service
372
+ # if: github.ref == 'refs/heads/dv-stage'
373
+ # run: |
374
+ # STAGE_ADMIN_API_KEY=$(echo "$SECRETS_JSON" | jq -r '.ADMIN_API_KEY // empty')
375
+ # if [ -z "$STAGE_ADMIN_API_KEY" ]; then
376
+ # echo "❌ ADMIN_API_KEY not found in SECRETS_JSON"
377
+ # exit 1
378
+ # fi
379
+ # STAGE_CALLING_BACKEND_URL=$(echo "$SECRETS_JSON" | jq -r '.CALLING_BACKEND_URL // empty')
380
+ # if [ -z "$STAGE_CALLING_BACKEND_URL" ]; then
381
+ # echo "❌ CALLING_BACKEND_URL not found in SECRETS_JSON"
382
+ # exit 1
383
+ # fi
384
+ # helm upgrade --install $HELM_RELEASE_NAME ./k8s/dv-pipecat \
385
+ # -f ./k8s/dv-pipecat/values-stage.yaml \
386
+ # --set image.repository=$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME \
387
+ # --set image.tag=$GITHUB_SHA \
388
+ # --set ADMIN_API_KEY="${STAGE_ADMIN_API_KEY}" \
389
+ # --set CALLING_BACKEND_URL="${STAGE_CALLING_BACKEND_URL}" \
390
+ # --namespace default
391
+
392
+ # # 2) **ONLY** when branch is dv-main: deploy/update the CANARY release
393
+ # - name: Deploy canary service
394
+ # if: github.ref == 'refs/heads/dv-main'
395
+ # run: |
396
+ # PROD_ADMIN_API_KEY=$(echo "$SECRETS_JSON" | jq -r '.ADMIN_API_KEY // empty')
397
+ # if [ -z "$PROD_ADMIN_API_KEY" ]; then
398
+ # echo "❌ ADMIN_API_KEY not found in SECRETS_JSON"
399
+ # exit 1
400
+ # fi
401
+ # PROD_CALLING_BACKEND_URL=$(echo "$SECRETS_JSON" | jq -r '.CALLING_BACKEND_URL // empty')
402
+ # if [ -z "$PROD_CALLING_BACKEND_URL" ]; then
403
+ # echo "❌ CALLING_BACKEND_URL not found in SECRETS_JSON"
404
+ # exit 1
405
+ # fi
406
+ # echo "🚀 Deploying canary service..."
407
+ # helm upgrade --install ${HELM_RELEASE_NAME}-canary ./k8s/dv-pipecat \
408
+ # -f ./k8s/dv-pipecat/values-prod.yaml \
409
+ # -f ./k8s/dv-pipecat/values-canary.yaml \
410
+ # --set image.repository=$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME \
411
+ # --set image.tag=$GITHUB_SHA \
412
+ # --set ADMIN_API_KEY="${PROD_ADMIN_API_KEY}" \
413
+ # --set CALLING_BACKEND_URL="${PROD_CALLING_BACKEND_URL}" \
414
+ # --namespace default
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.82.dev43
3
+ Version: 0.0.82.dev49
4
4
  Summary: An open source framework for voice (and multimodal) assistants
5
5
  License-Expression: BSD-2-Clause
6
6
  Project-URL: Source, https://github.com/pipecat-ai/pipecat
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.82.dev43
3
+ Version: 0.0.82.dev49
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
@@ -229,6 +229,7 @@ src/pipecat/serializers/__init__.py
229
229
  src/pipecat/serializers/asterisk.py
230
230
  src/pipecat/serializers/base_serializer.py
231
231
  src/pipecat/serializers/convox.py
232
+ src/pipecat/serializers/custom.py
232
233
  src/pipecat/serializers/exotel.py
233
234
  src/pipecat/serializers/livekit.py
234
235
  src/pipecat/serializers/plivo.py
@@ -1473,6 +1473,17 @@ class STTUpdateSettingsFrame(ServiceUpdateSettingsFrame):
1473
1473
  pass
1474
1474
 
1475
1475
 
1476
+ @dataclass
1477
+ class DTMFUpdateSettingsFrame(ServiceUpdateSettingsFrame):
1478
+ """Frame for updating DTMF aggregator settings.
1479
+
1480
+ Updates DTMF configuration dynamically during conversation flow.
1481
+ Settings can include: timeout, digits, end, reset parameters.
1482
+ """
1483
+
1484
+ pass
1485
+
1486
+
1476
1487
  @dataclass
1477
1488
  class VADParamsUpdateFrame(SystemFrame):
1478
1489
  """Frame for updating VAD parameters.
@@ -4,13 +4,6 @@
4
4
  # SPDX-License-Identifier: BSD 2-Clause License
5
5
  #
6
6
 
7
- """DTMF aggregation processor for converting keypad input to transcription.
8
-
9
- This module provides a frame processor that aggregates DTMF (Dual-Tone Multi-Frequency)
10
- keypad inputs into meaningful sequences and converts them to transcription frames
11
- for downstream processing by LLM context aggregators.
12
- """
13
-
14
7
  import asyncio
15
8
  from typing import Optional
16
9
 
@@ -24,7 +17,7 @@ from pipecat.frames.frames import (
24
17
  StartFrame,
25
18
  TranscriptionFrame,
26
19
  )
27
- from pipecat.processors.frame_processor import FrameDirection, FrameProcessor, FrameProcessorSetup
20
+ from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
28
21
  from pipecat.utils.time import time_now_iso8601
29
22
 
30
23
 
@@ -33,12 +26,16 @@ class DTMFAggregator(FrameProcessor):
33
26
 
34
27
  The aggregator accumulates digits from InputDTMFFrame instances and flushes
35
28
  when:
36
-
37
29
  - Timeout occurs (configurable idle period)
38
30
  - Termination digit is received (default: '#')
39
31
  - EndFrame or CancelFrame is received
40
32
 
41
33
  Emits TranscriptionFrame for compatibility with existing LLM context aggregators.
34
+
35
+ Args:
36
+ timeout: Idle timeout in seconds before flushing
37
+ termination_digit: Digit that triggers immediate flush
38
+ prefix: Prefix added to DTMF sequence in transcription
42
39
  """
43
40
 
44
41
  def __init__(
@@ -48,14 +45,6 @@ class DTMFAggregator(FrameProcessor):
48
45
  prefix: str = "DTMF: ",
49
46
  **kwargs,
50
47
  ):
51
- """Initialize the DTMF aggregator.
52
-
53
- Args:
54
- timeout: Idle timeout in seconds before flushing
55
- termination_digit: Digit that triggers immediate flush
56
- prefix: Prefix added to DTMF sequence in transcription
57
- **kwargs: Additional arguments passed to FrameProcessor
58
- """
59
48
  super().__init__(**kwargs)
60
49
  self._aggregation = ""
61
50
  self._idle_timeout = timeout
@@ -65,18 +54,7 @@ class DTMFAggregator(FrameProcessor):
65
54
  self._digit_event = asyncio.Event()
66
55
  self._aggregation_task: Optional[asyncio.Task] = None
67
56
 
68
- async def cleanup(self) -> None:
69
- """Clean up resources."""
70
- await super().cleanup()
71
- await self._stop_aggregation_task()
72
-
73
57
  async def process_frame(self, frame: Frame, direction: FrameDirection) -> None:
74
- """Process incoming frames and handle DTMF aggregation.
75
-
76
- Args:
77
- frame: The frame to process.
78
- direction: The direction of frame flow in the pipeline.
79
- """
80
58
  await super().process_frame(frame, direction)
81
59
 
82
60
  if isinstance(frame, StartFrame):
@@ -105,7 +83,7 @@ class DTMFAggregator(FrameProcessor):
105
83
 
106
84
  # For first digit, schedule interruption.
107
85
  if is_first_digit:
108
- await self.push_frame(BotInterruptionFrame(), FrameDirection.UPSTREAM)
86
+ asyncio.create_task(self._send_interruption_task())
109
87
 
110
88
  # Check for immediate flush conditions
111
89
  if frame.button == self._termination_digit:
@@ -114,6 +92,15 @@ class DTMFAggregator(FrameProcessor):
114
92
  # Signal digit received for timeout handling
115
93
  self._digit_event.set()
116
94
 
95
+ async def _send_interruption_task(self):
96
+ """Send interruption frame safely in a separate task."""
97
+ try:
98
+ # Send the interruption frame
99
+ await self.push_frame(BotInterruptionFrame(), FrameDirection.UPSTREAM)
100
+ except Exception as e:
101
+ # Log error but don't propagate
102
+ print(f"Error sending interruption: {e}")
103
+
117
104
  def _create_aggregation_task(self) -> None:
118
105
  """Creates the aggregation task if it hasn't been created yet."""
119
106
  if not self._aggregation_task:
@@ -132,6 +119,7 @@ class DTMFAggregator(FrameProcessor):
132
119
  await asyncio.wait_for(self._digit_event.wait(), timeout=self._idle_timeout)
133
120
  self._digit_event.clear()
134
121
  except asyncio.TimeoutError:
122
+ self.reset_watchdog()
135
123
  if self._aggregation:
136
124
  await self._flush_aggregation()
137
125
 
@@ -149,3 +137,8 @@ class DTMFAggregator(FrameProcessor):
149
137
  await self.push_frame(transcription_frame)
150
138
 
151
139
  self._aggregation = ""
140
+
141
+ async def cleanup(self) -> None:
142
+ """Clean up resources."""
143
+ await super().cleanup()
144
+ await self._stop_aggregation_task()
@@ -3,6 +3,7 @@ import asyncio
3
3
  from pipecat.frames.frames import (
4
4
  BotSpeakingFrame,
5
5
  CancelFrame,
6
+ DTMFUpdateSettingsFrame,
6
7
  EndFrame,
7
8
  Frame,
8
9
  InputDTMFFrame,
@@ -105,6 +106,65 @@ class DTMFAggregator(FrameProcessor):
105
106
  elif isinstance(frame, BotSpeakingFrame):
106
107
  if self._digit_aggregate_task is not None:
107
108
  self._digit_event.set()
109
+ elif isinstance(frame, DTMFUpdateSettingsFrame):
110
+ await self._update_settings(frame.settings)
111
+ # Don't pass the settings frame downstream
112
+
113
+ async def _update_settings(self, settings: dict) -> None:
114
+ """Update DTMF aggregator settings dynamically.
115
+
116
+ Args:
117
+ settings: Dictionary containing new DTMF settings
118
+ Supported keys: timeout, digits, end, reset
119
+ """
120
+ settings_changed = False
121
+
122
+ if "timeout" in settings and settings["timeout"] is not None:
123
+ new_timeout = float(settings["timeout"])
124
+ if new_timeout != self._idle_timeout:
125
+ self.logger.debug(f"Updating DTMF timeout from {self._idle_timeout} to {new_timeout}")
126
+ self._idle_timeout = new_timeout
127
+ settings_changed = True
128
+
129
+ if "digits" in settings:
130
+ new_digits = settings["digits"]
131
+ if new_digits != self._digits:
132
+ self.logger.debug(f"Updating DTMF digits from {self._digits} to {new_digits}")
133
+ self._digits = new_digits
134
+ settings_changed = True
135
+
136
+ if "end" in settings:
137
+ # Convert single string to set if needed
138
+ end_value = settings["end"]
139
+ if end_value is None:
140
+ new_end_on = set()
141
+ elif isinstance(end_value, str):
142
+ new_end_on = {end_value} if end_value else set()
143
+ else:
144
+ new_end_on = set(end_value)
145
+
146
+ if new_end_on != self._end_on:
147
+ self.logger.debug(f"Updating DTMF end_on from {self._end_on} to {new_end_on}")
148
+ self._end_on = new_end_on
149
+ settings_changed = True
150
+
151
+ if "reset" in settings:
152
+ # Convert single string to set if needed
153
+ reset_value = settings["reset"]
154
+ if reset_value is None:
155
+ new_reset_on = set()
156
+ elif isinstance(reset_value, str):
157
+ new_reset_on = {reset_value} if reset_value else set()
158
+ else:
159
+ new_reset_on = set(reset_value)
160
+
161
+ if new_reset_on != self._reset_on:
162
+ self.logger.debug(f"Updating DTMF reset_on from {self._reset_on} to {new_reset_on}")
163
+ self._reset_on = new_reset_on
164
+ settings_changed = True
165
+
166
+ if settings_changed:
167
+ self.logger.info(f"DTMF settings updated successfully")
108
168
 
109
169
  async def _digit_agg_handler(self, direction: FrameDirection, raise_timeout=False):
110
170
  """Idle task that waits for new DTMF activity. If no new digit is received within
@@ -1,5 +1,6 @@
1
1
  from .base_serializer import FrameSerializer, FrameSerializerType
2
2
  from .convox import ConVoxFrameSerializer
3
+ from .custom import CustomFrameSerializer
3
4
  from .exotel import ExotelFrameSerializer
4
5
  from .plivo import PlivoFrameSerializer
5
6
  from .telnyx import TelnyxFrameSerializer
@@ -7,8 +8,9 @@ from .twilio import TwilioFrameSerializer
7
8
 
8
9
  __all__ = [
9
10
  "FrameSerializer",
10
- "FrameSerializerType",
11
+ "FrameSerializerType",
11
12
  "ConVoxFrameSerializer",
13
+ "CustomFrameSerializer",
12
14
  "ExotelFrameSerializer",
13
15
  "PlivoFrameSerializer",
14
16
  "TelnyxFrameSerializer",