dv-pipecat-ai 0.0.74.dev613__tar.gz → 0.0.74.dev623__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.
Files changed (390) hide show
  1. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/github.yml +148 -1
  2. dv_pipecat_ai-0.0.74.dev623/.github/workflows/smart-auto-release.yml +171 -0
  3. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/CLAUDE.md +68 -1
  4. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/PKG-INFO +1 -1
  5. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/dv_pipecat_ai.egg-info/PKG-INFO +1 -1
  6. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/dv_pipecat_ai.egg-info/SOURCES.txt +1 -0
  7. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/convox.py +5 -10
  8. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/deepgram/stt.py +6 -1
  9. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/network/fastapi_websocket.py +22 -12
  10. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.dockerignore +0 -0
  11. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
  12. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
  13. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
  14. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
  15. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
  16. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
  17. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
  18. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  19. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  20. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/android.yaml +0 -0
  21. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/build.yaml +0 -0
  22. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/coverage.yaml +0 -0
  23. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/format.yaml +0 -0
  24. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/promote-prod.yml +0 -0
  25. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/publish.yaml +0 -0
  26. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/publish_test.yaml +0 -0
  27. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/set-traffic-split.yml +0 -0
  28. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.github/workflows/tests.yaml +0 -0
  29. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.gitignore +0 -0
  30. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.pre-commit-config.yaml +0 -0
  31. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/.readthedocs.yaml +0 -0
  32. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/CHANGELOG.md +0 -0
  33. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/CHANGELOG.md.template +0 -0
  34. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/CONTRIBUTING.md +0 -0
  35. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/Dockerfile +0 -0
  36. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/LICENSE +0 -0
  37. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/MANIFEST.in +0 -0
  38. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/README.md +0 -0
  39. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/ansible.cfg +0 -0
  40. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/ansible_deployment.sh +0 -0
  41. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/cleanup_old_containers.yml +0 -0
  42. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/codecov.yml +0 -0
  43. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/create-new-machine/ansible.cfg +0 -0
  44. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/create-new-machine/ansible_setup.sh +0 -0
  45. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/create-new-machine/inventory.ini +0 -0
  46. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/create-new-machine/replace_env.yml +0 -0
  47. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/create-new-machine/setup_playbook.yml +0 -0
  48. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/create_inventory.py +0 -0
  49. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/delete_old_dockers.sh +0 -0
  50. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/deploy.sh +0 -0
  51. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/deploy_playbook.yml +0 -0
  52. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/dev-requirements.txt +0 -0
  53. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/docker-compose.dev.yml +0 -0
  54. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/dot-env.template +0 -0
  55. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/dump_logs.yml +0 -0
  56. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/fetch_logs.yml +0 -0
  57. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/inventory.ini +0 -0
  58. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/.helmignore +0 -0
  59. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/Chart.yaml +0 -0
  60. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
  61. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
  62. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
  63. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
  64. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
  65. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/templates/service.yaml +0 -0
  66. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/values-canary.yaml +0 -0
  67. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/values-prod.yaml +0 -0
  68. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/values-stage.yaml +0 -0
  69. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/dv-pipecat/values.yaml +0 -0
  70. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/k8s/istio/destination-virtualservice.yaml +0 -0
  71. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/merge-code-into-single-file.sh +0 -0
  72. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/pipecat.png +0 -0
  73. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/pyproject.toml +0 -0
  74. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/restart.sh +0 -0
  75. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/restart_playbook.yml +0 -0
  76. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/setup.cfg +0 -0
  77. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
  78. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/dv_pipecat_ai.egg-info/requires.txt +0 -0
  79. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
  80. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/__init__.py +0 -0
  81. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/__init__.py +0 -0
  82. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/base_llm_adapter.py +0 -0
  83. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/schemas/__init__.py +0 -0
  84. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/schemas/function_schema.py +0 -0
  85. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
  86. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/services/__init__.py +0 -0
  87. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
  88. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
  89. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
  90. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
  91. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
  92. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
  93. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/__init__.py +0 -0
  94. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/filters/__init__.py +0 -0
  95. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
  96. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/filters/koala_filter.py +0 -0
  97. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/filters/krisp_filter.py +0 -0
  98. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
  99. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/interruptions/__init__.py +0 -0
  100. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
  101. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
  102. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/mixers/__init__.py +0 -0
  103. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
  104. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
  105. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/resamplers/__init__.py +0 -0
  106. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
  107. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
  108. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
  109. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/__init__.py +0 -0
  110. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
  111. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
  112. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
  113. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
  114. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
  115. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
  116. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
  117. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/utils.py +0 -0
  118. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/vad/__init__.py +0 -0
  119. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/vad/data/__init__.py +0 -0
  120. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
  121. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/vad/silero.py +0 -0
  122. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
  123. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/clocks/__init__.py +0 -0
  124. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/clocks/base_clock.py +0 -0
  125. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/clocks/system_clock.py +0 -0
  126. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/examples/__init__.py +0 -0
  127. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/examples/daily_runner.py +0 -0
  128. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/examples/run.py +0 -0
  129. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/frames/__init__.py +0 -0
  130. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/frames/frames.proto +0 -0
  131. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/frames/frames.py +0 -0
  132. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
  133. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/metrics/__init__.py +0 -0
  134. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/metrics/metrics.py +0 -0
  135. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/__init__.py +0 -0
  136. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/base_observer.py +0 -0
  137. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/loggers/__init__.py +0 -0
  138. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
  139. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
  140. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
  141. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
  142. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/observers/turn_tracking_observer.py +0 -0
  143. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/__init__.py +0 -0
  144. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/base_pipeline.py +0 -0
  145. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/base_task.py +0 -0
  146. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
  147. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/pipeline.py +0 -0
  148. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/runner.py +0 -0
  149. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
  150. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/task.py +0 -0
  151. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/task_observer.py +0 -0
  152. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
  153. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/__init__.py +0 -0
  154. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/__init__.py +0 -0
  155. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/dtmf_aggregator.py +0 -0
  156. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/gated.py +0 -0
  157. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/gated_openai_llm_context.py +0 -0
  158. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/llm_response.py +0 -0
  159. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
  160. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/sentence.py +0 -0
  161. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/user_response.py +0 -0
  162. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
  163. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/async_generator.py +0 -0
  164. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/audio/__init__.py +0 -0
  165. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
  166. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/consumer_processor.py +0 -0
  167. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/dtmf_aggregator.py +0 -0
  168. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/__init__.py +0 -0
  169. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/frame_filter.py +0 -0
  170. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/function_filter.py +0 -0
  171. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/identity_filter.py +0 -0
  172. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/null_filter.py +0 -0
  173. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
  174. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
  175. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
  176. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/frame_processor.py +0 -0
  177. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/frameworks/__init__.py +0 -0
  178. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/frameworks/langchain.py +0 -0
  179. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/frameworks/rtvi.py +0 -0
  180. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/gstreamer/__init__.py +0 -0
  181. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
  182. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/idle_frame_processor.py +0 -0
  183. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/logger.py +0 -0
  184. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/metrics/__init__.py +0 -0
  185. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/metrics/frame_processor_metrics.py +0 -0
  186. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/metrics/sentry.py +0 -0
  187. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/producer_processor.py +0 -0
  188. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/text_transformer.py +0 -0
  189. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/transcript_processor.py +0 -0
  190. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
  191. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/processors/user_idle_processor.py +0 -0
  192. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/py.typed +0 -0
  193. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/__init__.py +0 -0
  194. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/base_serializer.py +0 -0
  195. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/exotel.py +0 -0
  196. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/genesys.py +0 -0
  197. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/livekit.py +0 -0
  198. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/plivo.py +0 -0
  199. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/protobuf.py +0 -0
  200. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/telnyx.py +0 -0
  201. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/serializers/twilio.py +0 -0
  202. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/__init__.py +0 -0
  203. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/ai_service.py +0 -0
  204. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/ai_services.py +0 -0
  205. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/anthropic/__init__.py +0 -0
  206. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/anthropic/llm.py +0 -0
  207. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/assemblyai/__init__.py +0 -0
  208. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/assemblyai/models.py +0 -0
  209. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/assemblyai/stt.py +0 -0
  210. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws/__init__.py +0 -0
  211. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws/llm.py +0 -0
  212. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws/stt.py +0 -0
  213. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws/tts.py +0 -0
  214. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws/utils.py +0 -0
  215. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
  216. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
  217. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
  218. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
  219. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/aws_nova_sonic/ready.wav +0 -0
  220. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/azure/__init__.py +0 -0
  221. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/azure/common.py +0 -0
  222. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/azure/image.py +0 -0
  223. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/azure/llm.py +0 -0
  224. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/azure/stt.py +0 -0
  225. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/azure/tts.py +0 -0
  226. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/cartesia/__init__.py +0 -0
  227. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/cartesia/stt.py +0 -0
  228. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/cartesia/tts.py +0 -0
  229. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/cerebras/__init__.py +0 -0
  230. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/cerebras/llm.py +0 -0
  231. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/deepgram/__init__.py +0 -0
  232. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/deepgram/tts.py +0 -0
  233. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/deepseek/__init__.py +0 -0
  234. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/deepseek/llm.py +0 -0
  235. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/elevenlabs/__init__.py +0 -0
  236. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/elevenlabs/tts.py +0 -0
  237. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/fal/__init__.py +0 -0
  238. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/fal/image.py +0 -0
  239. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/fal/stt.py +0 -0
  240. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/fireworks/__init__.py +0 -0
  241. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/fireworks/llm.py +0 -0
  242. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/fish/__init__.py +0 -0
  243. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/fish/tts.py +0 -0
  244. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
  245. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
  246. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
  247. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/gladia/__init__.py +0 -0
  248. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/gladia/config.py +0 -0
  249. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/gladia/stt.py +0 -0
  250. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/__init__.py +0 -0
  251. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/frames.py +0 -0
  252. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/google.py +0 -0
  253. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/image.py +0 -0
  254. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/llm.py +0 -0
  255. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/llm_openai.py +0 -0
  256. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/llm_vertex.py +0 -0
  257. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/rtvi.py +0 -0
  258. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/stt.py +0 -0
  259. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/test-google-chirp.py +0 -0
  260. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/google/tts.py +0 -0
  261. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/grok/__init__.py +0 -0
  262. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/grok/llm.py +0 -0
  263. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/groq/__init__.py +0 -0
  264. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/groq/llm.py +0 -0
  265. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/groq/stt.py +0 -0
  266. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/groq/tts.py +0 -0
  267. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/image_service.py +0 -0
  268. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/llm_service.py +0 -0
  269. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/lmnt/__init__.py +0 -0
  270. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/lmnt/tts.py +0 -0
  271. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/mcp_service.py +0 -0
  272. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/mem0/__init__.py +0 -0
  273. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/mem0/memory.py +0 -0
  274. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/minimax/__init__.py +0 -0
  275. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/minimax/tts.py +0 -0
  276. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/moondream/__init__.py +0 -0
  277. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/moondream/vision.py +0 -0
  278. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/neuphonic/__init__.py +0 -0
  279. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/neuphonic/tts.py +0 -0
  280. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/nim/__init__.py +0 -0
  281. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/nim/llm.py +0 -0
  282. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/ollama/__init__.py +0 -0
  283. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/ollama/llm.py +0 -0
  284. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai/__init__.py +0 -0
  285. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai/base_llm.py +0 -0
  286. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai/image.py +0 -0
  287. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai/llm.py +0 -0
  288. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai/stt.py +0 -0
  289. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai/tts.py +0 -0
  290. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai.py +0 -0
  291. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
  292. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
  293. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
  294. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
  295. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
  296. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
  297. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openpipe/__init__.py +0 -0
  298. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openpipe/llm.py +0 -0
  299. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openrouter/__init__.py +0 -0
  300. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/openrouter/llm.py +0 -0
  301. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/perplexity/__init__.py +0 -0
  302. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/perplexity/llm.py +0 -0
  303. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/piper/__init__.py +0 -0
  304. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/piper/tts.py +0 -0
  305. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/playht/__init__.py +0 -0
  306. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/playht/tts.py +0 -0
  307. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/qwen/__init__.py +0 -0
  308. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/qwen/llm.py +0 -0
  309. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/rime/__init__.py +0 -0
  310. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/rime/tts.py +0 -0
  311. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/riva/__init__.py +0 -0
  312. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/riva/stt.py +0 -0
  313. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/riva/tts.py +0 -0
  314. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/sambanova/__init__.py +0 -0
  315. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/sambanova/llm.py +0 -0
  316. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/sambanova/stt.py +0 -0
  317. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/sarvam/__init__.py +0 -0
  318. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/sarvam/tts.py +0 -0
  319. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/simli/__init__.py +0 -0
  320. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/simli/video.py +0 -0
  321. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/stt_service.py +0 -0
  322. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/tavus/__init__.py +0 -0
  323. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/tavus/video.py +0 -0
  324. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/together/__init__.py +0 -0
  325. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/together/llm.py +0 -0
  326. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/tts_service.py +0 -0
  327. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/ultravox/__init__.py +0 -0
  328. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/ultravox/stt.py +0 -0
  329. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/vision_service.py +0 -0
  330. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/websocket_service.py +0 -0
  331. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/whisper/__init__.py +0 -0
  332. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/whisper/base_stt.py +0 -0
  333. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/whisper/stt.py +0 -0
  334. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/xtts/__init__.py +0 -0
  335. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/services/xtts/tts.py +0 -0
  336. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/sync/__init__.py +0 -0
  337. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/sync/base_notifier.py +0 -0
  338. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/sync/event_notifier.py +0 -0
  339. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/tests/__init__.py +0 -0
  340. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/tests/utils.py +0 -0
  341. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transcriptions/__init__.py +0 -0
  342. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transcriptions/language.py +0 -0
  343. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/__init__.py +0 -0
  344. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/base_input.py +0 -0
  345. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/base_output.py +0 -0
  346. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/base_transport.py +0 -0
  347. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/local/__init__.py +0 -0
  348. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/local/audio.py +0 -0
  349. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/local/tk.py +0 -0
  350. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/network/__init__.py +0 -0
  351. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/network/small_webrtc.py +0 -0
  352. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/network/webrtc_connection.py +0 -0
  353. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/network/websocket_client.py +0 -0
  354. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/network/websocket_server.py +0 -0
  355. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/services/__init__.py +0 -0
  356. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/services/daily.py +0 -0
  357. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/services/helpers/__init__.py +0 -0
  358. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
  359. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/services/livekit.py +0 -0
  360. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/transports/services/tavus.py +0 -0
  361. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/__init__.py +0 -0
  362. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/asyncio/__init__.py +0 -0
  363. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/asyncio/task_manager.py +0 -0
  364. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/asyncio/watchdog_async_iterator.py +0 -0
  365. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/asyncio/watchdog_event.py +0 -0
  366. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/asyncio/watchdog_priority_queue.py +0 -0
  367. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/asyncio/watchdog_queue.py +0 -0
  368. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/base_object.py +0 -0
  369. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/logger_config.py +0 -0
  370. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/network.py +0 -0
  371. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/string.py +0 -0
  372. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/text/__init__.py +0 -0
  373. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
  374. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/text/base_text_filter.py +0 -0
  375. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
  376. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
  377. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
  378. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
  379. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/time.py +0 -0
  380. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/__init__.py +0 -0
  381. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/class_decorators.py +0 -0
  382. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
  383. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/service_attributes.py +0 -0
  384. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/service_decorators.py +0 -0
  385. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/setup.py +0 -0
  386. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
  387. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
  388. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/src/pipecat/utils/utils.py +0 -0
  389. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/stop_container.yml +0 -0
  390. {dv_pipecat_ai-0.0.74.dev613 → dv_pipecat_ai-0.0.74.dev623}/test-requirements.txt +0 -0
@@ -34,6 +34,55 @@ jobs:
34
34
  - name: Checkout code
35
35
  uses: actions/checkout@v4
36
36
 
37
+ # - name: Set up Python
38
+ # uses: actions/setup-python@v4
39
+ # with:
40
+ # python-version: '3.10'
41
+
42
+ # - name: Install Python dependencies
43
+ # run: |
44
+ # python -m pip install --upgrade pip
45
+ # pip install requests packaging
46
+
47
+ # - name: Verify PyPI package availability
48
+ # run: |
49
+ # echo "🔍 Verifying PyPI package availability..."
50
+
51
+ # # Get version from remote-requirements.txt
52
+ # PIPECAT_VERSION=$(grep "dv-pipecat-ai" examples/ringg-chatbot/remote-requirements.txt | sed -n 's/.*==\([^]]*\).*/\1/p')
53
+ # echo "📦 Required pipecat version: $PIPECAT_VERSION"
54
+
55
+ # # Verify package is available on PyPI with retry logic
56
+ # MAX_ATTEMPTS=30
57
+ # ATTEMPT=1
58
+ # PACKAGE_AVAILABLE=false
59
+
60
+ # while [ $ATTEMPT -le $MAX_ATTEMPTS ]; do
61
+ # echo "🔍 Attempt $ATTEMPT/$MAX_ATTEMPTS: Checking PyPI for dv-pipecat-ai==$PIPECAT_VERSION"
62
+
63
+ # if python scripts/check-pypi-package.py dv-pipecat-ai "$PIPECAT_VERSION"; then
64
+ # PACKAGE_AVAILABLE=true
65
+ # echo "✅ PyPI package verification successful!"
66
+ # break
67
+ # else
68
+ # if [ $ATTEMPT -eq $MAX_ATTEMPTS ]; then
69
+ # echo "❌ FAILED: Package dv-pipecat-ai==$PIPECAT_VERSION not available on PyPI after $MAX_ATTEMPTS attempts"
70
+ # echo "🚨 This usually means:"
71
+ # echo " 1. The auto-release workflow failed to publish"
72
+ # echo " 2. PyPI is experiencing delays"
73
+ # echo " 3. Version mismatch between requirements.txt and PyPI"
74
+ # exit 1
75
+ # else
76
+ # WAIT_TIME=$((ATTEMPT * 10))
77
+ # echo "⏳ Package not yet available, waiting ${WAIT_TIME}s before retry..."
78
+ # sleep $WAIT_TIME
79
+ # fi
80
+ # fi
81
+ # ATTEMPT=$((ATTEMPT + 1))
82
+ # done
83
+
84
+ # echo "PIPECAT_VERSION=$PIPECAT_VERSION" >> $GITHUB_ENV
85
+
37
86
  - name: Authenticate to GCP using Workload Identity Federation
38
87
  id: auth
39
88
  uses: google-github-actions/auth@v2
@@ -134,9 +183,107 @@ jobs:
134
183
  - name: Deploy canary service
135
184
  if: github.ref == 'refs/heads/dv-main'
136
185
  run: |
186
+ echo "🚀 Deploying canary service..."
137
187
  helm upgrade --install ${HELM_RELEASE_NAME}-canary ./k8s/dv-pipecat \
138
188
  -f ./k8s/dv-pipecat/values-prod.yaml \
139
189
  -f ./k8s/dv-pipecat/values-canary.yaml \
140
190
  --set image.repository=$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME \
141
191
  --set image.tag=$GITHUB_SHA \
142
- --namespace default
192
+ --namespace default
193
+
194
+ # - name: Deployment validation
195
+ # run: |
196
+ # echo "🔍 Validating deployment..."
197
+
198
+ # if [ "${{ github.ref }}" == "refs/heads/dv-stage" ]; then
199
+ # DEPLOYMENT_NAME="$HELM_RELEASE_NAME"
200
+ # ENVIRONMENT="staging"
201
+ # else
202
+ # DEPLOYMENT_NAME="${HELM_RELEASE_NAME}-canary"
203
+ # ENVIRONMENT="production-canary"
204
+ # fi
205
+
206
+ # echo "📊 Checking deployment: $DEPLOYMENT_NAME"
207
+
208
+ # # Wait for deployment to be ready
209
+ # kubectl rollout status deployment/$DEPLOYMENT_NAME --namespace=default --timeout=300s
210
+
211
+ # # Check pod status
212
+ # READY_PODS=$(kubectl get deployment $DEPLOYMENT_NAME --namespace=default -o jsonpath='{.status.readyReplicas}')
213
+ # DESIRED_PODS=$(kubectl get deployment $DEPLOYMENT_NAME --namespace=default -o jsonpath='{.spec.replicas}')
214
+
215
+ # echo "📈 Pod Status: $READY_PODS/$DESIRED_PODS ready"
216
+
217
+ # if [ "$READY_PODS" = "$DESIRED_PODS" ] && [ "$READY_PODS" -gt "0" ]; then
218
+ # echo "✅ Deployment validation successful for $ENVIRONMENT"
219
+ # echo "🎉 All $READY_PODS pods are ready and running"
220
+
221
+ # # Show running pods
222
+ # echo "🔍 Running pods:"
223
+ # kubectl get pods -l app.kubernetes.io/name=dv-pipecat --namespace=default
224
+
225
+ # else
226
+ # echo "❌ Deployment validation failed for $ENVIRONMENT"
227
+ # echo "🚨 Expected $DESIRED_PODS pods, but only $READY_PODS are ready"
228
+
229
+ # # Show pod details for debugging
230
+ # echo "🔍 Pod details:"
231
+ # kubectl get pods -l app.kubernetes.io/name=dv-pipecat --namespace=default
232
+ # kubectl describe deployment/$DEPLOYMENT_NAME --namespace=default
233
+
234
+ # exit 1
235
+ # fi
236
+
237
+ # - name: Package version verification
238
+ # run: |
239
+ # echo "🔍 Verifying deployment readiness..."
240
+
241
+ # if [ "${{ github.ref }}" == "refs/heads/dv-stage" ]; then
242
+ # DEPLOYMENT_NAME="$HELM_RELEASE_NAME"
243
+ # else
244
+ # DEPLOYMENT_NAME="${HELM_RELEASE_NAME}-canary"
245
+ # fi
246
+
247
+ # # Get a pod name from the deployment
248
+ # POD_NAME=$(kubectl get pods -l app.kubernetes.io/name=dv-pipecat,app.kubernetes.io/instance=$DEPLOYMENT_NAME --namespace=default -o jsonpath='{.items[0].metadata.name}' 2>/dev/null || echo "")
249
+
250
+ # if [ -n "$POD_NAME" ]; then
251
+ # echo "📦 Found running pod: $POD_NAME"
252
+ # echo "📊 Expected pipecat version: $PIPECAT_VERSION"
253
+ # echo "✅ Deployment verification completed"
254
+ # else
255
+ # echo "⚠️ Could not find running pod for verification"
256
+ # fi
257
+
258
+ # - name: Deployment success notification
259
+ # run: |
260
+ # if [ "${{ github.ref }}" == "refs/heads/dv-stage" ]; then
261
+ # ENVIRONMENT="🔧 Staging"
262
+ # NEXT_STEP="Ready for production deployment to dv-main"
263
+ # else
264
+ # ENVIRONMENT="🚀 Production Canary"
265
+ # NEXT_STEP="Ready for promotion to stable production"
266
+ # fi
267
+
268
+ # echo "🎉 DEPLOYMENT SUCCESS!"
269
+ # echo " Environment: $ENVIRONMENT"
270
+ # echo " Pipecat Version: $PIPECAT_VERSION"
271
+ # echo " Image: $REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME:$GITHUB_SHA"
272
+ # echo " Next Step: $NEXT_STEP"
273
+
274
+ # - name: Deployment failure notification
275
+ # if: failure()
276
+ # run: |
277
+ # echo "❌ DEPLOYMENT FAILED!"
278
+ # echo "🚨 The deployment encountered an error. Check the logs above for details."
279
+
280
+ # # Show recent events for debugging
281
+ # echo "🔍 Recent Kubernetes events:"
282
+ # kubectl get events --namespace=default --sort-by='.metadata.creationTimestamp' --field-selector type!=Normal | tail -10
283
+
284
+ # # Show deployment status
285
+ # if [ "${{ github.ref }}" == "refs/heads/dv-stage" ]; then
286
+ # kubectl describe deployment/$HELM_RELEASE_NAME --namespace=default || true
287
+ # else
288
+ # kubectl describe deployment/${HELM_RELEASE_NAME}-canary --namespace=default || true
289
+ # fi
@@ -0,0 +1,171 @@
1
+ name: Smart Auto-Release on PR Merge
2
+
3
+ on:
4
+ pull_request:
5
+ types: [closed]
6
+ branches: [dv-stage]
7
+
8
+ env:
9
+ PACKAGE_NAME: "dv-pipecat-ai"
10
+ REQUIREMENTS_FILE: "examples/ringg-chatbot/remote-requirements.txt"
11
+
12
+ jobs:
13
+ smart-release:
14
+ if: github.event.pull_request.merged == true
15
+ runs-on: ubuntu-latest
16
+ permissions:
17
+ contents: write
18
+ pull-requests: write
19
+
20
+ steps:
21
+ - name: Checkout code
22
+ uses: actions/checkout@v4
23
+ with:
24
+ fetch-depth: 0
25
+ token: ${{ secrets.GITHUB_TOKEN }}
26
+
27
+ - name: Set up Python
28
+ uses: actions/setup-python@v4
29
+ with:
30
+ python-version: '3.10'
31
+
32
+ - name: Install dependencies
33
+ run: |
34
+ python -m pip install --upgrade pip
35
+ pip install build twine requests packaging
36
+
37
+ - name: Check for src/pipecat changes
38
+ id: check-changes
39
+ run: |
40
+ echo "Checking for changes in src/pipecat..."
41
+ if git diff --name-only ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }} | grep -q "src/pipecat"; then
42
+ echo "HAS_PIPECAT_CHANGES=true" >> $GITHUB_OUTPUT
43
+ echo "✅ Found changes in src/pipecat"
44
+ else
45
+ echo "HAS_PIPECAT_CHANGES=false" >> $GITHUB_OUTPUT
46
+ echo "ℹ️ No changes in src/pipecat detected"
47
+ fi
48
+
49
+ - name: Get current versions
50
+ if: steps.check-changes.outputs.HAS_PIPECAT_CHANGES == 'true'
51
+ id: versions
52
+ run: |
53
+ echo "Getting current versions..."
54
+
55
+ # Get latest PyPI version using helper script
56
+ PYPI_VERSION=$(python scripts/get-pypi-version.py ${{ env.PACKAGE_NAME }})
57
+ echo "PYPI_VERSION=$PYPI_VERSION" >> $GITHUB_OUTPUT
58
+
59
+ # Get remote-requirements.txt version
60
+ if [ -f "${{ env.REQUIREMENTS_FILE }}" ]; then
61
+ REQUIREMENTS_VERSION=$(grep "${{ env.PACKAGE_NAME }}" ${{ env.REQUIREMENTS_FILE }} | sed -n 's/.*==\([^]]*\).*/\1/p')
62
+ echo "REQUIREMENTS_VERSION=$REQUIREMENTS_VERSION" >> $GITHUB_OUTPUT
63
+ else
64
+ echo "REQUIREMENTS_VERSION=0.0.0.dev0" >> $GITHUB_OUTPUT
65
+ fi
66
+
67
+ echo "📊 Version Status:"
68
+ echo " PyPI version: $PYPI_VERSION"
69
+ echo " Requirements version: $REQUIREMENTS_VERSION"
70
+
71
+ - name: Decide release action
72
+ if: steps.check-changes.outputs.HAS_PIPECAT_CHANGES == 'true'
73
+ id: decision
74
+ run: |
75
+ PYPI_VERSION="${{ steps.versions.outputs.PYPI_VERSION }}"
76
+ REQUIREMENTS_VERSION="${{ steps.versions.outputs.REQUIREMENTS_VERSION }}"
77
+
78
+ echo "🤔 Decision Logic:"
79
+ echo " PyPI version: $PYPI_VERSION"
80
+ echo " Requirements version: $REQUIREMENTS_VERSION"
81
+
82
+ if [ "$PYPI_VERSION" = "$REQUIREMENTS_VERSION" ]; then
83
+ echo "SHOULD_RELEASE=true" >> $GITHUB_OUTPUT
84
+ echo "REASON=Versions match - auto-bumping needed" >> $GITHUB_OUTPUT
85
+ echo "✅ Decision: AUTO-RELEASE (versions match)"
86
+ else
87
+ echo "SHOULD_RELEASE=false" >> $GITHUB_OUTPUT
88
+ echo "REASON=Developer already updated version" >> $GITHUB_OUTPUT
89
+ echo "⏭️ Decision: SKIP (developer handled versioning)"
90
+ fi
91
+
92
+ - name: Skip release notification
93
+ if: steps.check-changes.outputs.HAS_PIPECAT_CHANGES == 'false' || steps.decision.outputs.SHOULD_RELEASE == 'false'
94
+ run: |
95
+ if [ "${{ steps.check-changes.outputs.HAS_PIPECAT_CHANGES }}" = "false" ]; then
96
+ echo "⏭️ SKIPPING: No src/pipecat changes detected"
97
+ SKIP_REASON="No src/pipecat changes in this PR"
98
+ else
99
+ echo "⏭️ SKIPPING: ${{ steps.decision.outputs.REASON }}"
100
+ SKIP_REASON="Developer already updated version"
101
+ fi
102
+ echo "Skip reason: $SKIP_REASON"
103
+
104
+ - name: Calculate new version
105
+ if: steps.decision.outputs.SHOULD_RELEASE == 'true'
106
+ id: new-version
107
+ run: |
108
+ CURRENT_VERSION="${{ steps.versions.outputs.PYPI_VERSION }}"
109
+ echo "📈 Calculating new version from: $CURRENT_VERSION"
110
+
111
+ # Use helper script to increment version
112
+ NEW_VERSION=$(python scripts/increment-version.py "$CURRENT_VERSION")
113
+
114
+ echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_OUTPUT
115
+ echo "🚀 New version will be: $NEW_VERSION"
116
+
117
+ - name: Build package
118
+ if: steps.decision.outputs.SHOULD_RELEASE == 'true'
119
+ run: |
120
+ echo "🔨 Building package..."
121
+ python -m build
122
+ echo "✅ Package built successfully"
123
+ ls -la dist/
124
+
125
+ - name: Publish to PyPI
126
+ if: steps.decision.outputs.SHOULD_RELEASE == 'true'
127
+ uses: pypa/gh-action-pypi-publish@release/v1
128
+ with:
129
+ password: ${{ secrets.PYPI_API_TOKEN }}
130
+ print-hash: true
131
+ verbose: true
132
+
133
+ - name: Update remote-requirements.txt
134
+ if: steps.decision.outputs.SHOULD_RELEASE == 'true'
135
+ run: |
136
+ NEW_VERSION="${{ steps.new-version.outputs.NEW_VERSION }}"
137
+ echo "📝 Updating ${{ env.REQUIREMENTS_FILE }} with version $NEW_VERSION"
138
+
139
+ # Update the version in remote-requirements.txt
140
+ sed -i.bak "s/${{ env.PACKAGE_NAME }}\[.*\]==.*/${{ env.PACKAGE_NAME }}[daily,cartesia,openai,silero,deepgram,azure,elevenlabs,google,groq,sentry,soundfile]==$NEW_VERSION/" ${{ env.REQUIREMENTS_FILE }}
141
+
142
+ # Show the change
143
+ echo "📋 Updated requirements file:"
144
+ grep "${{ env.PACKAGE_NAME }}" ${{ env.REQUIREMENTS_FILE }}
145
+
146
+ # Configure git
147
+ git config --local user.email "action@github.com"
148
+ git config --local user.name "GitHub Action"
149
+
150
+ # Commit the change
151
+ git add ${{ env.REQUIREMENTS_FILE }}
152
+ git commit -m "🤖 Auto-bump pipecat version to $NEW_VERSION"
153
+
154
+ # Push to dv-stage
155
+ git push origin HEAD:dv-stage
156
+
157
+ - name: Success notification
158
+ if: steps.decision.outputs.SHOULD_RELEASE == 'true'
159
+ run: |
160
+ NEW_VERSION="${{ steps.new-version.outputs.NEW_VERSION }}"
161
+ echo "🎉 SUCCESS: Auto-release completed!"
162
+ echo " 📦 Published: ${{ env.PACKAGE_NAME }} v$NEW_VERSION"
163
+ echo " 🔗 PyPI: https://pypi.org/project/${{ env.PACKAGE_NAME }}/$NEW_VERSION/"
164
+ echo " 📝 Updated: ${{ env.REQUIREMENTS_FILE }}"
165
+ echo " 🚀 Deployment will proceed automatically"
166
+
167
+ - name: Error notification
168
+ if: failure() && steps.decision.outputs.SHOULD_RELEASE == 'true'
169
+ run: |
170
+ echo "❌ ERROR: Auto-release failed!"
171
+ echo "Check the workflow logs for details."
@@ -36,6 +36,30 @@ ruff check --select I
36
36
  ./scripts/pre-commit.sh
37
37
  ```
38
38
 
39
+ ### Release Management
40
+ **🚀 Smart Auto-Release System** - Automated version management and deployment
41
+
42
+ ```bash
43
+ # Developer workflow (unchanged):
44
+ # 1. Make changes to src/pipecat
45
+ # 2. Create PR to dv-stage → Merge
46
+ # 3. Everything else is automatic!
47
+
48
+ # Manual version utilities (if needed):
49
+ python scripts/version-utils.py info # Check version status
50
+ python scripts/version-utils.py check # Verify version consistency
51
+ python scripts/version-utils.py update 0.0.75.dev123 # Manual version update
52
+ ```
53
+
54
+ **How it works:**
55
+ - ✅ **Auto-detects** when `src/pipecat` changes
56
+ - ✅ **Smart versioning** - only releases when needed
57
+ - ✅ **PyPI publishing** with error handling and retries
58
+ - ✅ **Deployment coordination** with package verification
59
+ - ✅ **Zero developer overhead** - respects manual versioning
60
+
61
+ See **[docs/AUTO_RELEASE.md](docs/AUTO_RELEASE.md)** for complete documentation.
62
+
39
63
  ### Ringg Chatbot Development (Primary Codebase)
40
64
  The main development work happens in `examples/ringg-chatbot/`, which is a production telephony chatbot system.
41
65
 
@@ -252,6 +276,47 @@ For deep understanding of the Pipecat framework architecture:
252
276
  - AI services integration (LLMService, STTService, TTSService)
253
277
  - Complete code flow patterns and when to use different approaches
254
278
 
279
+ ## Performance & Async Requirements
280
+
281
+ ### Critical Performance Considerations
282
+
283
+ **⚡ Async Processing - Never Block the Event Loop**
284
+ - **MANDATORY**: All operations must be async and non-blocking
285
+ - Use `await` for I/O operations (file reads, network calls, database queries)
286
+ - Use `asyncio.create_task()` or `asyncio.gather()` for concurrent operations
287
+ - Never use blocking calls like `time.sleep()` - use `asyncio.sleep()` instead
288
+ - Avoid synchronous file I/O - use `aiofiles` or async equivalents
289
+ - Database operations must use async drivers (asyncpg, aiomysql, etc.)
290
+
291
+ **🎯 Ultra-Low Latency Voice AI**
292
+ - **Target**: Minimize time from "user stops speaking" → "bot starts speaking"
293
+ - **Critical Path**: STT processing → LLM response → TTS generation → audio output
294
+ - Every millisecond matters for natural conversation flow
295
+ - Optimize each pipeline stage for minimal latency:
296
+ - STT: Use streaming transcription services (Deepgram, AssemblyAI)
297
+ - LLM: Choose fast models, optimize prompts, use streaming responses
298
+ - TTS: Cache common responses, use low-latency providers (Cartesia, ElevenLabs)
299
+ - Audio: Minimize buffering, use real-time transport protocols
300
+
301
+ ### Async Best Practices
302
+ ```python
303
+ # ✅ Good - Non-blocking async operations
304
+ async def process_audio(audio_data):
305
+ tasks = [
306
+ asyncio.create_task(stt_service.transcribe(audio_data)),
307
+ asyncio.create_task(cache.get(cache_key))
308
+ ]
309
+ results = await asyncio.gather(*tasks)
310
+ return results
311
+
312
+ # ❌ Bad - Blocking operations that freeze the event loop
313
+ def process_audio_bad(audio_data):
314
+ time.sleep(0.1) # Blocks entire event loop!
315
+ response = requests.get(url) # Synchronous HTTP call
316
+ with open('file.txt', 'r') as f: # Synchronous file I/O
317
+ data = f.read()
318
+ ```
319
+
255
320
  ## Common Gotchas
256
321
 
257
322
  - **For framework development**: Always activate virtual environment and use `pip install -e ".[provider,...]"`
@@ -259,4 +324,6 @@ For deep understanding of the Pipecat framework architecture:
259
324
  - Pre-commit hooks enforce code formatting with Ruff
260
325
  - Frame processors must handle both downstream and upstream flow
261
326
  - Pipeline lifecycle: StartFrame → processing → EndFrame/StopFrame
262
- - **Telephony**: WebSocket connections require proper call_id tracking and cleanup
327
+ - **Telephony**: WebSocket connections require proper call_id tracking and cleanup
328
+ - **Async**: Never block the event loop - use async/await for all I/O operations
329
+ - **Latency**: Voice AI requires sub-second response times - optimize every pipeline stage
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.74.dev613
3
+ Version: 0.0.74.dev623
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.74.dev613
3
+ Version: 0.0.74.dev623
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
@@ -49,6 +49,7 @@ test-requirements.txt
49
49
  .github/workflows/publish.yaml
50
50
  .github/workflows/publish_test.yaml
51
51
  .github/workflows/set-traffic-split.yml
52
+ .github/workflows/smart-auto-release.yml
52
53
  .github/workflows/tests.yaml
53
54
  create-new-machine/ansible.cfg
54
55
  create-new-machine/ansible_setup.sh
@@ -5,6 +5,7 @@
5
5
  #
6
6
 
7
7
  import base64
8
+ import datetime
8
9
  import json
9
10
  from typing import Optional
10
11
 
@@ -14,6 +15,7 @@ from pydantic import BaseModel
14
15
  from pipecat.audio.utils import create_default_resampler
15
16
  from pipecat.frames.frames import (
16
17
  AudioRawFrame,
18
+ CancelFrame,
17
19
  EndFrame,
18
20
  Frame,
19
21
  InputAudioRawFrame,
@@ -117,7 +119,7 @@ class ConVoxFrameSerializer(FrameSerializer):
117
119
  if self._call_ended:
118
120
  logger.debug("🎵 CONVOX SERIALIZE: Skipping audio - call has ended")
119
121
  return None
120
-
122
+
121
123
  # Convert PCM audio to ConVox format
122
124
  data = frame.audio
123
125
  # logger.info(
@@ -134,11 +136,8 @@ class ConVoxFrameSerializer(FrameSerializer):
134
136
 
135
137
  # Encode as base64 for transmission
136
138
  payload = base64.b64encode(serialized_data).decode("ascii")
137
- logger.info(f"🎵 CONVOX SERIALIZE: Base64 encoded - {len(payload)} characters")
138
139
 
139
140
  # ConVox expects play_audio event format according to the documentation
140
- import datetime
141
-
142
141
  timestamp = datetime.datetime.now().isoformat()
143
142
 
144
143
  message = {
@@ -253,15 +252,11 @@ class ConVoxFrameSerializer(FrameSerializer):
253
252
  elif event == "end_call" or event == "call_end":
254
253
  logger.info("ConVox call end event received")
255
254
  self._call_ended = True
256
- return EndFrame()
255
+ return CancelFrame()
257
256
 
258
257
  elif event == "failed":
259
258
  logger.info(f"ConVox failed event received: {message}")
260
259
  self._call_ended = True
261
- return EndFrame()
262
-
263
- else:
264
- logger.debug(f"Unhandled ConVox event: {event}")
265
- return None
260
+ return CancelFrame()
266
261
 
267
262
  return None
@@ -6,6 +6,7 @@
6
6
 
7
7
  """Deepgram speech-to-text service implementation."""
8
8
 
9
+ import logging
9
10
  from typing import AsyncGenerator, Dict, Optional
10
11
 
11
12
  from loguru import logger
@@ -116,7 +117,11 @@ class DeepgramSTTService(STTService):
116
117
  api_key,
117
118
  config=DeepgramClientOptions(
118
119
  url=base_url,
119
- options={"keepalive": "true"}, # verbose=logging.DEBUG
120
+ options={
121
+ "keepalive": "true",
122
+ # "termination_exception_connect": True, # Enable exception propagation
123
+ },
124
+ verbose=logging.ERROR, # Enable warning level and above logging
120
125
  ),
121
126
  )
122
127
 
@@ -36,7 +36,7 @@ from pipecat.utils.asyncio.watchdog_async_iterator import WatchdogAsyncIterator
36
36
 
37
37
  try:
38
38
  from fastapi import WebSocket
39
- from starlette.websockets import WebSocketState
39
+ from starlette.websockets import WebSocketDisconnect, WebSocketState
40
40
  except ModuleNotFoundError as e:
41
41
  logger.error(f"Exception: {e}")
42
42
  logger.error(
@@ -87,16 +87,22 @@ class FastAPIWebsocketClient:
87
87
  else:
88
88
  await self._websocket.send_text(data)
89
89
  except Exception as e:
90
- logger.error(
91
- f"{self} exception sending data: {e.__class__.__name__} ({e}), application_state: {self._websocket.application_state}",
92
- call_id=self._conversation_id,
93
- )
94
- # TODO: Remove print statement
95
- print("Exception sending data")
96
- traceback.print_exc()
90
+ if isinstance(e, WebSocketDisconnect):
91
+ logger.warning(
92
+ f"{self} WebSocket disconnected during send: {e}, application_state: {self._websocket.application_state}",
93
+ call_id=self._conversation_id,
94
+ )
95
+ else:
96
+ logger.error(
97
+ f"{self} exception sending data: {e.__class__.__name__} ({e}), application_state: {self._websocket.application_state}",
98
+ call_id=self._conversation_id,
99
+ )
97
100
  # For some reason the websocket is disconnected, and we are not able to send data
98
- # So let's properly handle it and disconnect the transport
99
- if self._websocket.application_state == WebSocketState.DISCONNECTED:
101
+ # So let's properly handle it and disconnect the transport if it is not already disconnecting
102
+ if (
103
+ self._websocket.application_state == WebSocketState.DISCONNECTED
104
+ and not self.is_closing
105
+ ):
100
106
  logger.warning(
101
107
  "Closing already disconnected websocket!", call_id=self._conversation_id
102
108
  )
@@ -109,8 +115,12 @@ class FastAPIWebsocketClient:
109
115
  return
110
116
  if self.is_connected and not self.is_closing:
111
117
  self._closing = True
112
- await self._websocket.close()
113
- await self.trigger_client_disconnected()
118
+ try:
119
+ await self._websocket.close()
120
+ except Exception as e:
121
+ logger.error(f"{self} exception while closing the websocket: {e}")
122
+ finally:
123
+ await self.trigger_client_disconnected()
114
124
 
115
125
  async def trigger_client_disconnected(self):
116
126
  await self._callbacks.on_client_disconnected(self._websocket)