dv-pipecat-ai 0.0.74.dev595__tar.gz → 0.0.74.dev613__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.dev595 → dv_pipecat_ai-0.0.74.dev613}/PKG-INFO +1 -1
  2. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/docker-compose.dev.yml +1 -1
  3. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/dv_pipecat_ai.egg-info/PKG-INFO +1 -1
  4. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/dv_pipecat_ai.egg-info/SOURCES.txt +1 -0
  5. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/frame_processor.py +13 -16
  6. dv_pipecat_ai-0.0.74.dev613/src/pipecat/serializers/__init__.py +24 -0
  7. dv_pipecat_ai-0.0.74.dev613/src/pipecat/serializers/convox.py +267 -0
  8. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/logger_config.py +3 -0
  9. dv_pipecat_ai-0.0.74.dev595/src/pipecat/utils/text/__init__.py +0 -0
  10. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.dockerignore +0 -0
  11. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
  12. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
  13. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
  14. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
  15. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
  16. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
  17. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
  18. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  19. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  20. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/android.yaml +0 -0
  21. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/build.yaml +0 -0
  22. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/coverage.yaml +0 -0
  23. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/format.yaml +0 -0
  24. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/github.yml +0 -0
  25. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/promote-prod.yml +0 -0
  26. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/publish.yaml +0 -0
  27. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/publish_test.yaml +0 -0
  28. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/set-traffic-split.yml +0 -0
  29. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.github/workflows/tests.yaml +0 -0
  30. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.gitignore +0 -0
  31. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.pre-commit-config.yaml +0 -0
  32. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/.readthedocs.yaml +0 -0
  33. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/CHANGELOG.md +0 -0
  34. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/CHANGELOG.md.template +0 -0
  35. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/CLAUDE.md +0 -0
  36. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/CONTRIBUTING.md +0 -0
  37. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/Dockerfile +0 -0
  38. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/LICENSE +0 -0
  39. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/MANIFEST.in +0 -0
  40. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/README.md +0 -0
  41. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/ansible.cfg +0 -0
  42. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/ansible_deployment.sh +0 -0
  43. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/cleanup_old_containers.yml +0 -0
  44. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/codecov.yml +0 -0
  45. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create-new-machine/ansible.cfg +0 -0
  46. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create-new-machine/ansible_setup.sh +0 -0
  47. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create-new-machine/inventory.ini +0 -0
  48. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create-new-machine/replace_env.yml +0 -0
  49. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create-new-machine/setup_playbook.yml +0 -0
  50. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/create_inventory.py +0 -0
  51. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/delete_old_dockers.sh +0 -0
  52. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/deploy.sh +0 -0
  53. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/deploy_playbook.yml +0 -0
  54. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/dev-requirements.txt +0 -0
  55. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/dot-env.template +0 -0
  56. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/dump_logs.yml +0 -0
  57. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/fetch_logs.yml +0 -0
  58. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/inventory.ini +0 -0
  59. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/.helmignore +0 -0
  60. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/Chart.yaml +0 -0
  61. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
  62. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
  63. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
  64. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
  65. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
  66. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/templates/service.yaml +0 -0
  67. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/values-canary.yaml +0 -0
  68. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/values-prod.yaml +0 -0
  69. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/values-stage.yaml +0 -0
  70. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/dv-pipecat/values.yaml +0 -0
  71. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/k8s/istio/destination-virtualservice.yaml +0 -0
  72. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/merge-code-into-single-file.sh +0 -0
  73. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/pipecat.png +0 -0
  74. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/pyproject.toml +0 -0
  75. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/restart.sh +0 -0
  76. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/restart_playbook.yml +0 -0
  77. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/setup.cfg +0 -0
  78. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
  79. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/dv_pipecat_ai.egg-info/requires.txt +0 -0
  80. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
  81. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/__init__.py +0 -0
  82. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/__init__.py +0 -0
  83. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/base_llm_adapter.py +0 -0
  84. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/schemas/__init__.py +0 -0
  85. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/schemas/function_schema.py +0 -0
  86. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
  87. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/services/__init__.py +0 -0
  88. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
  89. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
  90. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
  91. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
  92. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
  93. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
  94. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/__init__.py +0 -0
  95. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/filters/__init__.py +0 -0
  96. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
  97. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/filters/koala_filter.py +0 -0
  98. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/filters/krisp_filter.py +0 -0
  99. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
  100. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/interruptions/__init__.py +0 -0
  101. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
  102. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
  103. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/mixers/__init__.py +0 -0
  104. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
  105. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
  106. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/resamplers/__init__.py +0 -0
  107. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
  108. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
  109. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
  110. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/__init__.py +0 -0
  111. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
  112. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
  113. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
  114. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
  115. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
  116. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
  117. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
  118. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/utils.py +0 -0
  119. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/vad/__init__.py +0 -0
  120. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/vad/data/__init__.py +0 -0
  121. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
  122. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/vad/silero.py +0 -0
  123. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
  124. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/clocks/__init__.py +0 -0
  125. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/clocks/base_clock.py +0 -0
  126. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/clocks/system_clock.py +0 -0
  127. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/examples/__init__.py +0 -0
  128. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/examples/daily_runner.py +0 -0
  129. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/examples/run.py +0 -0
  130. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/frames/__init__.py +0 -0
  131. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/frames/frames.proto +0 -0
  132. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/frames/frames.py +0 -0
  133. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
  134. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/metrics/__init__.py +0 -0
  135. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/metrics/metrics.py +0 -0
  136. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/__init__.py +0 -0
  137. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/base_observer.py +0 -0
  138. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/loggers/__init__.py +0 -0
  139. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
  140. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
  141. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
  142. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
  143. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/observers/turn_tracking_observer.py +0 -0
  144. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/__init__.py +0 -0
  145. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/base_pipeline.py +0 -0
  146. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/base_task.py +0 -0
  147. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
  148. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/pipeline.py +0 -0
  149. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/runner.py +0 -0
  150. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
  151. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/task.py +0 -0
  152. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/task_observer.py +0 -0
  153. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
  154. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/__init__.py +0 -0
  155. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/__init__.py +0 -0
  156. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/dtmf_aggregator.py +0 -0
  157. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/gated.py +0 -0
  158. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/gated_openai_llm_context.py +0 -0
  159. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/llm_response.py +0 -0
  160. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
  161. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/sentence.py +0 -0
  162. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/user_response.py +0 -0
  163. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
  164. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/async_generator.py +0 -0
  165. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/audio/__init__.py +0 -0
  166. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
  167. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/consumer_processor.py +0 -0
  168. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/dtmf_aggregator.py +0 -0
  169. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/__init__.py +0 -0
  170. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/frame_filter.py +0 -0
  171. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/function_filter.py +0 -0
  172. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/identity_filter.py +0 -0
  173. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/null_filter.py +0 -0
  174. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
  175. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
  176. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
  177. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/frameworks/__init__.py +0 -0
  178. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/frameworks/langchain.py +0 -0
  179. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/frameworks/rtvi.py +0 -0
  180. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/gstreamer/__init__.py +0 -0
  181. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
  182. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/idle_frame_processor.py +0 -0
  183. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/logger.py +0 -0
  184. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/metrics/__init__.py +0 -0
  185. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/metrics/frame_processor_metrics.py +0 -0
  186. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/metrics/sentry.py +0 -0
  187. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/producer_processor.py +0 -0
  188. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/text_transformer.py +0 -0
  189. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/transcript_processor.py +0 -0
  190. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
  191. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/processors/user_idle_processor.py +0 -0
  192. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/py.typed +0 -0
  193. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/base_serializer.py +0 -0
  194. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/exotel.py +0 -0
  195. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/genesys.py +0 -0
  196. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/livekit.py +0 -0
  197. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/plivo.py +0 -0
  198. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/protobuf.py +0 -0
  199. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/telnyx.py +0 -0
  200. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/serializers/twilio.py +0 -0
  201. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/__init__.py +0 -0
  202. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/ai_service.py +0 -0
  203. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/ai_services.py +0 -0
  204. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/anthropic/__init__.py +0 -0
  205. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/anthropic/llm.py +0 -0
  206. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/assemblyai/__init__.py +0 -0
  207. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/assemblyai/models.py +0 -0
  208. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/assemblyai/stt.py +0 -0
  209. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws/__init__.py +0 -0
  210. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws/llm.py +0 -0
  211. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws/stt.py +0 -0
  212. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws/tts.py +0 -0
  213. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws/utils.py +0 -0
  214. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
  215. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
  216. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
  217. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
  218. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/aws_nova_sonic/ready.wav +0 -0
  219. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/azure/__init__.py +0 -0
  220. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/azure/common.py +0 -0
  221. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/azure/image.py +0 -0
  222. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/azure/llm.py +0 -0
  223. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/azure/stt.py +0 -0
  224. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/azure/tts.py +0 -0
  225. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/cartesia/__init__.py +0 -0
  226. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/cartesia/stt.py +0 -0
  227. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/cartesia/tts.py +0 -0
  228. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/cerebras/__init__.py +0 -0
  229. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/cerebras/llm.py +0 -0
  230. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/deepgram/__init__.py +0 -0
  231. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/deepgram/stt.py +0 -0
  232. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/deepgram/tts.py +0 -0
  233. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/deepseek/__init__.py +0 -0
  234. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/deepseek/llm.py +0 -0
  235. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/elevenlabs/__init__.py +0 -0
  236. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/elevenlabs/tts.py +0 -0
  237. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/fal/__init__.py +0 -0
  238. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/fal/image.py +0 -0
  239. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/fal/stt.py +0 -0
  240. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/fireworks/__init__.py +0 -0
  241. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/fireworks/llm.py +0 -0
  242. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/fish/__init__.py +0 -0
  243. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/fish/tts.py +0 -0
  244. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
  245. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
  246. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
  247. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/gladia/__init__.py +0 -0
  248. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/gladia/config.py +0 -0
  249. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/gladia/stt.py +0 -0
  250. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/__init__.py +0 -0
  251. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/frames.py +0 -0
  252. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/google.py +0 -0
  253. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/image.py +0 -0
  254. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/llm.py +0 -0
  255. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/llm_openai.py +0 -0
  256. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/llm_vertex.py +0 -0
  257. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/rtvi.py +0 -0
  258. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/stt.py +0 -0
  259. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/test-google-chirp.py +0 -0
  260. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/google/tts.py +0 -0
  261. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/grok/__init__.py +0 -0
  262. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/grok/llm.py +0 -0
  263. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/groq/__init__.py +0 -0
  264. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/groq/llm.py +0 -0
  265. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/groq/stt.py +0 -0
  266. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/groq/tts.py +0 -0
  267. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/image_service.py +0 -0
  268. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/llm_service.py +0 -0
  269. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/lmnt/__init__.py +0 -0
  270. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/lmnt/tts.py +0 -0
  271. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/mcp_service.py +0 -0
  272. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/mem0/__init__.py +0 -0
  273. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/mem0/memory.py +0 -0
  274. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/minimax/__init__.py +0 -0
  275. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/minimax/tts.py +0 -0
  276. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/moondream/__init__.py +0 -0
  277. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/moondream/vision.py +0 -0
  278. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/neuphonic/__init__.py +0 -0
  279. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/neuphonic/tts.py +0 -0
  280. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/nim/__init__.py +0 -0
  281. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/nim/llm.py +0 -0
  282. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/ollama/__init__.py +0 -0
  283. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/ollama/llm.py +0 -0
  284. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai/__init__.py +0 -0
  285. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai/base_llm.py +0 -0
  286. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai/image.py +0 -0
  287. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai/llm.py +0 -0
  288. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai/stt.py +0 -0
  289. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai/tts.py +0 -0
  290. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai.py +0 -0
  291. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
  292. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
  293. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
  294. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
  295. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
  296. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
  297. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openpipe/__init__.py +0 -0
  298. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openpipe/llm.py +0 -0
  299. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openrouter/__init__.py +0 -0
  300. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/openrouter/llm.py +0 -0
  301. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/perplexity/__init__.py +0 -0
  302. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/perplexity/llm.py +0 -0
  303. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/piper/__init__.py +0 -0
  304. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/piper/tts.py +0 -0
  305. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/playht/__init__.py +0 -0
  306. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/playht/tts.py +0 -0
  307. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/qwen/__init__.py +0 -0
  308. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/qwen/llm.py +0 -0
  309. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/rime/__init__.py +0 -0
  310. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/rime/tts.py +0 -0
  311. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/riva/__init__.py +0 -0
  312. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/riva/stt.py +0 -0
  313. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/riva/tts.py +0 -0
  314. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/sambanova/__init__.py +0 -0
  315. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/sambanova/llm.py +0 -0
  316. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/sambanova/stt.py +0 -0
  317. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/sarvam/__init__.py +0 -0
  318. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/sarvam/tts.py +0 -0
  319. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/simli/__init__.py +0 -0
  320. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/simli/video.py +0 -0
  321. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/stt_service.py +0 -0
  322. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/tavus/__init__.py +0 -0
  323. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/tavus/video.py +0 -0
  324. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/together/__init__.py +0 -0
  325. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/together/llm.py +0 -0
  326. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/tts_service.py +0 -0
  327. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/ultravox/__init__.py +0 -0
  328. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/ultravox/stt.py +0 -0
  329. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/vision_service.py +0 -0
  330. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/websocket_service.py +0 -0
  331. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/whisper/__init__.py +0 -0
  332. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/whisper/base_stt.py +0 -0
  333. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/whisper/stt.py +0 -0
  334. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/xtts/__init__.py +0 -0
  335. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/services/xtts/tts.py +0 -0
  336. {dv_pipecat_ai-0.0.74.dev595/src/pipecat/serializers → dv_pipecat_ai-0.0.74.dev613/src/pipecat/sync}/__init__.py +0 -0
  337. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/sync/base_notifier.py +0 -0
  338. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/sync/event_notifier.py +0 -0
  339. {dv_pipecat_ai-0.0.74.dev595/src/pipecat/sync → dv_pipecat_ai-0.0.74.dev613/src/pipecat/tests}/__init__.py +0 -0
  340. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/tests/utils.py +0 -0
  341. {dv_pipecat_ai-0.0.74.dev595/src/pipecat/tests → dv_pipecat_ai-0.0.74.dev613/src/pipecat/transcriptions}/__init__.py +0 -0
  342. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transcriptions/language.py +0 -0
  343. {dv_pipecat_ai-0.0.74.dev595/src/pipecat/transcriptions → dv_pipecat_ai-0.0.74.dev613/src/pipecat/transports}/__init__.py +0 -0
  344. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/base_input.py +0 -0
  345. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/base_output.py +0 -0
  346. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/base_transport.py +0 -0
  347. {dv_pipecat_ai-0.0.74.dev595/src/pipecat/transports → dv_pipecat_ai-0.0.74.dev613/src/pipecat/transports/local}/__init__.py +0 -0
  348. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/local/audio.py +0 -0
  349. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/local/tk.py +0 -0
  350. {dv_pipecat_ai-0.0.74.dev595/src/pipecat/transports/local → dv_pipecat_ai-0.0.74.dev613/src/pipecat/transports/network}/__init__.py +0 -0
  351. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/network/fastapi_websocket.py +0 -0
  352. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/network/small_webrtc.py +0 -0
  353. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/network/webrtc_connection.py +0 -0
  354. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/network/websocket_client.py +0 -0
  355. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/network/websocket_server.py +0 -0
  356. {dv_pipecat_ai-0.0.74.dev595/src/pipecat/transports/network → dv_pipecat_ai-0.0.74.dev613/src/pipecat/transports/services}/__init__.py +0 -0
  357. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/services/daily.py +0 -0
  358. {dv_pipecat_ai-0.0.74.dev595/src/pipecat/transports/services → dv_pipecat_ai-0.0.74.dev613/src/pipecat/transports/services/helpers}/__init__.py +0 -0
  359. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
  360. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/services/livekit.py +0 -0
  361. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/transports/services/tavus.py +0 -0
  362. {dv_pipecat_ai-0.0.74.dev595/src/pipecat/transports/services/helpers → dv_pipecat_ai-0.0.74.dev613/src/pipecat/utils}/__init__.py +0 -0
  363. {dv_pipecat_ai-0.0.74.dev595/src/pipecat/utils → dv_pipecat_ai-0.0.74.dev613/src/pipecat/utils/asyncio}/__init__.py +0 -0
  364. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/asyncio/task_manager.py +0 -0
  365. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/asyncio/watchdog_async_iterator.py +0 -0
  366. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/asyncio/watchdog_event.py +0 -0
  367. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/asyncio/watchdog_priority_queue.py +0 -0
  368. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/asyncio/watchdog_queue.py +0 -0
  369. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/base_object.py +0 -0
  370. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/network.py +0 -0
  371. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/string.py +0 -0
  372. {dv_pipecat_ai-0.0.74.dev595/src/pipecat/utils/asyncio → dv_pipecat_ai-0.0.74.dev613/src/pipecat/utils/text}/__init__.py +0 -0
  373. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
  374. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/text/base_text_filter.py +0 -0
  375. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
  376. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
  377. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
  378. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
  379. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/time.py +0 -0
  380. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/__init__.py +0 -0
  381. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/class_decorators.py +0 -0
  382. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
  383. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/service_attributes.py +0 -0
  384. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/service_decorators.py +0 -0
  385. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/setup.py +0 -0
  386. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
  387. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
  388. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/src/pipecat/utils/utils.py +0 -0
  389. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/stop_container.yml +0 -0
  390. {dv_pipecat_ai-0.0.74.dev595 → dv_pipecat_ai-0.0.74.dev613}/test-requirements.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.74.dev595
3
+ Version: 0.0.74.dev613
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
@@ -10,4 +10,4 @@ services:
10
10
  - "8765:8765"
11
11
  volumes:
12
12
  - ./examples/ringg-chatbot:/app
13
- command: python server.py
13
+ command: python server.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.74.dev595
3
+ Version: 0.0.74.dev613
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
@@ -188,6 +188,7 @@ src/pipecat/processors/metrics/frame_processor_metrics.py
188
188
  src/pipecat/processors/metrics/sentry.py
189
189
  src/pipecat/serializers/__init__.py
190
190
  src/pipecat/serializers/base_serializer.py
191
+ src/pipecat/serializers/convox.py
191
192
  src/pipecat/serializers/exotel.py
192
193
  src/pipecat/serializers/genesys.py
193
194
  src/pipecat/serializers/livekit.py
@@ -434,31 +434,28 @@ class FrameProcessor(BaseObject):
434
434
  self.__input_frame_task = None
435
435
 
436
436
  async def __input_frame_task_handler(self):
437
+ """Handle frames from the input queue."""
438
+ my_queue = self.__input_queue
437
439
  while True:
438
- frame_tuple = None # Initialize to None
440
+ if self.__should_block_frames and self.__input_event:
441
+ logger.trace(f"{self}: frame processing paused")
442
+ await self.__input_event.wait()
443
+ self.__input_event.clear()
444
+ self.__should_block_frames = False
445
+ logger.trace(f"{self}: frame processing resumed")
446
+
447
+ (frame, direction, callback) = await my_queue.get()
439
448
  try:
440
- if self.__should_block_frames and self.__input_event:
441
- self.logger.trace(f"{self}: frame processing paused")
442
- await self.__input_event.wait()
443
- self.__input_event.clear()
444
- self.__should_block_frames = False
445
- self.logger.trace(f"{self}: frame processing resumed")
446
-
447
- frame_tuple = await self.__input_queue.get()
448
- (frame, direction, callback) = frame_tuple
449
-
449
+ # Process the frame.
450
450
  await self.process_frame(frame, direction)
451
+ # If this frame has an associated callback, call it now.
451
452
  if callback:
452
453
  await callback(self, frame, direction)
453
- except asyncio.CancelledError:
454
- raise
455
454
  except Exception as e:
456
455
  self.logger.exception(f"{self}: error processing frame: {e}")
457
456
  await self.push_error(ErrorFrame(str(e)))
458
457
  finally:
459
- # Only call task_done() if an item was successfully dequeued.
460
- if frame_tuple is not None:
461
- self.__input_queue.task_done()
458
+ my_queue.task_done()
462
459
 
463
460
  def __create_push_task(self):
464
461
  if not self.__push_frame_task:
@@ -0,0 +1,24 @@
1
+ from .base_serializer import FrameSerializer, FrameSerializerType
2
+ from .convox import ConVoxFrameSerializer
3
+ from .exotel import ExotelFrameSerializer
4
+ from .plivo import PlivoFrameSerializer
5
+ from .telnyx import TelnyxFrameSerializer
6
+ from .twilio import TwilioFrameSerializer
7
+
8
+ __all__ = [
9
+ "FrameSerializer",
10
+ "FrameSerializerType",
11
+ "ConVoxFrameSerializer",
12
+ "ExotelFrameSerializer",
13
+ "PlivoFrameSerializer",
14
+ "TelnyxFrameSerializer",
15
+ "TwilioFrameSerializer",
16
+ ]
17
+
18
+ # Optional imports
19
+ try:
20
+ from .livekit import LiveKitFrameSerializer
21
+ __all__.append("LiveKitFrameSerializer")
22
+ except (ImportError, Exception):
23
+ # Catch both ImportError and the Exception raised by livekit.py when module is missing
24
+ pass
@@ -0,0 +1,267 @@
1
+ #
2
+ # Copyright (c) 2024–2025, Daily
3
+ #
4
+ # SPDX-License-Identifier: BSD 2-Clause License
5
+ #
6
+
7
+ import base64
8
+ import json
9
+ from typing import Optional
10
+
11
+ from loguru import logger
12
+ from pydantic import BaseModel
13
+
14
+ from pipecat.audio.utils import create_default_resampler
15
+ from pipecat.frames.frames import (
16
+ AudioRawFrame,
17
+ EndFrame,
18
+ Frame,
19
+ InputAudioRawFrame,
20
+ InputDTMFFrame,
21
+ KeypadEntry,
22
+ StartFrame,
23
+ StartInterruptionFrame,
24
+ TransportMessageFrame,
25
+ TransportMessageUrgentFrame,
26
+ )
27
+ from pipecat.serializers.base_serializer import FrameSerializer, FrameSerializerType
28
+
29
+
30
+ class ConVoxFrameSerializer(FrameSerializer):
31
+ """Serializer for ConVox WebSocket protocol.
32
+
33
+ This serializer handles converting between Pipecat frames and ConVox's WebSocket
34
+ protocol. It supports audio conversion, DTMF events, and real-time communication
35
+ with ConVox telephony systems.
36
+
37
+ ConVox WebSocket protocol typically uses:
38
+ - PCM audio format at 16kHz sample rate
39
+ - Base64 encoded audio payloads
40
+ - JSON message format for control and media events
41
+ """
42
+
43
+ class InputParams(BaseModel):
44
+ """Configuration parameters for ConVoxFrameSerializer.
45
+
46
+ Attributes:
47
+ convox_sample_rate: Sample rate used by ConVox, defaults to 16000 Hz.
48
+ sample_rate: Optional override for pipeline input sample rate.
49
+ auto_hang_up: Whether to automatically terminate call on EndFrame.
50
+ """
51
+
52
+ convox_sample_rate: int = 16000
53
+ sample_rate: Optional[int] = None
54
+ auto_hang_up: bool = False
55
+
56
+ def __init__(
57
+ self,
58
+ stream_id: str,
59
+ call_id: Optional[str] = None,
60
+ params: Optional[InputParams] = None,
61
+ ):
62
+ """Initialize the ConVoxFrameSerializer.
63
+
64
+ Args:
65
+ stream_id: The ConVox stream identifier.
66
+ call_id: The associated ConVox call identifier.
67
+ params: Configuration parameters.
68
+ """
69
+ self._stream_id = stream_id
70
+ self._call_id = call_id
71
+ self._params = params or ConVoxFrameSerializer.InputParams()
72
+
73
+ self._convox_sample_rate = self._params.convox_sample_rate
74
+ self._sample_rate = 0 # Pipeline input rate
75
+ self._call_ended = False
76
+
77
+ self._resampler = create_default_resampler()
78
+
79
+ @property
80
+ def type(self) -> FrameSerializerType:
81
+ """Gets the serializer type.
82
+
83
+ Returns:
84
+ The serializer type as TEXT for JSON WebSocket messages.
85
+ """
86
+ return FrameSerializerType.TEXT
87
+
88
+ async def setup(self, frame: StartFrame):
89
+ """Sets up the serializer with pipeline configuration.
90
+
91
+ Args:
92
+ frame: The StartFrame containing pipeline configuration.
93
+ """
94
+ self._sample_rate = self._params.sample_rate or frame.audio_in_sample_rate
95
+
96
+ async def serialize(self, frame: Frame) -> str | bytes | None:
97
+ """Serializes a Pipecat frame to ConVox WebSocket format.
98
+
99
+ Handles conversion of various frame types to ConVox WebSocket messages.
100
+
101
+ Args:
102
+ frame: The Pipecat frame to serialize.
103
+
104
+ Returns:
105
+ Serialized data as JSON string, or None if the frame isn't handled.
106
+ """
107
+ if isinstance(frame, StartInterruptionFrame):
108
+ # Clear/interrupt command for ConVox
109
+ message = {
110
+ "event": "clear",
111
+ "stream_id": self._stream_id,
112
+ "call_id": self._call_id,
113
+ }
114
+ return json.dumps(message)
115
+
116
+ elif isinstance(frame, AudioRawFrame):
117
+ if self._call_ended:
118
+ logger.debug("🎵 CONVOX SERIALIZE: Skipping audio - call has ended")
119
+ return None
120
+
121
+ # Convert PCM audio to ConVox format
122
+ data = frame.audio
123
+ # logger.info(
124
+ # f"🎵 CONVOX SERIALIZE: Processing AudioRawFrame - Original: {len(data)} bytes at {frame.sample_rate}Hz"
125
+ # )
126
+
127
+ # Resample to ConVox sample rate
128
+ serialized_data = await self._resampler.resample(
129
+ data, frame.sample_rate, self._convox_sample_rate
130
+ )
131
+ # logger.info(
132
+ # f"🎵 CONVOX SERIALIZE: Resampled to {self._convox_sample_rate}Hz - {len(serialized_data)} bytes"
133
+ # )
134
+
135
+ # Encode as base64 for transmission
136
+ payload = base64.b64encode(serialized_data).decode("ascii")
137
+ logger.info(f"🎵 CONVOX SERIALIZE: Base64 encoded - {len(payload)} characters")
138
+
139
+ # ConVox expects play_audio event format according to the documentation
140
+ import datetime
141
+
142
+ timestamp = datetime.datetime.now().isoformat()
143
+
144
+ message = {
145
+ "event": "play_audio",
146
+ "stream_id": self._stream_id,
147
+ "call_id": self._call_id,
148
+ "details": {
149
+ "timestamp": timestamp,
150
+ "direction": "WSS",
151
+ "message": payload,
152
+ },
153
+ }
154
+
155
+ # logger.info(
156
+ # f"🎵 CONVOX SERIALIZE: Sending play_audio event to ConVox - stream_id: {self._stream_id}, call_id: {self._call_id}"
157
+ # )
158
+ # logger.debug(f"🎵 CONVOX SERIALIZE: Complete message: {json.dumps(message, indent=2)}")
159
+
160
+ return json.dumps(message)
161
+
162
+ elif isinstance(frame, (TransportMessageFrame, TransportMessageUrgentFrame)):
163
+ # Pass through transport messages
164
+ return json.dumps(frame.message)
165
+
166
+ return None
167
+
168
+ async def deserialize(self, data: str | bytes) -> Frame | None:
169
+ """Deserializes ConVox WebSocket data to Pipecat frames.
170
+
171
+ Handles conversion of ConVox media events to appropriate Pipecat frames.
172
+
173
+ Args:
174
+ data: The raw WebSocket data from ConVox.
175
+
176
+ Returns:
177
+ A Pipecat frame corresponding to the ConVox event, or None if unhandled.
178
+ """
179
+ try:
180
+ message = json.loads(data)
181
+ except json.JSONDecodeError:
182
+ logger.error(f"Invalid JSON received from ConVox: {data}")
183
+ return None
184
+
185
+ event = message.get("event")
186
+
187
+ if event == "media":
188
+ # Handle incoming audio data
189
+ media = message.get("media", {})
190
+ payload_base64 = media.get("payload")
191
+
192
+ if not payload_base64:
193
+ logger.warning("🎵 CONVOX DESERIALIZE: No payload in ConVox media message")
194
+ return None
195
+
196
+ try:
197
+ payload = base64.b64decode(payload_base64)
198
+ # logger.info(
199
+ # f"🎵 CONVOX DESERIALIZE: Received audio from ConVox - {len(payload)} bytes at {self._convox_sample_rate}Hz"
200
+ # )
201
+ except Exception as e:
202
+ logger.error(f"🎵 CONVOX DESERIALIZE: Error decoding ConVox audio payload: {e}")
203
+ return None
204
+
205
+ # Convert from ConVox sample rate to pipeline sample rate
206
+ deserialized_data = await self._resampler.resample(
207
+ payload,
208
+ self._convox_sample_rate,
209
+ self._sample_rate,
210
+ )
211
+ # logger.info(
212
+ # f"🎵 CONVOX DESERIALIZE: Resampled to pipeline rate {self._sample_rate}Hz - {len(deserialized_data)} bytes"
213
+ # )
214
+
215
+ audio_frame = InputAudioRawFrame(
216
+ audio=deserialized_data,
217
+ num_channels=1, # ConVox typically uses mono audio
218
+ sample_rate=self._sample_rate,
219
+ )
220
+ # logger.info(
221
+ # f"🎵 CONVOX DESERIALIZE: Created InputAudioRawFrame for pipeline processing"
222
+ # )
223
+ return audio_frame
224
+
225
+ elif event == "dtmf":
226
+ # Handle DTMF events
227
+ dtmf_data = message.get("dtmf", {})
228
+ digit = dtmf_data.get("digit")
229
+
230
+ if digit:
231
+ try:
232
+ return InputDTMFFrame(KeypadEntry(digit))
233
+ except ValueError:
234
+ logger.warning(f"Invalid DTMF digit from ConVox: {digit}")
235
+ return None
236
+
237
+ elif event == "start":
238
+ # Handle stream start event
239
+ logger.info(f"ConVox stream started: {message}")
240
+ return None
241
+
242
+ elif event == "stop":
243
+ # Handle stream stop event
244
+ logger.info(f"ConVox stream stopped: {message}")
245
+ return None
246
+
247
+ elif event == "error":
248
+ # Handle error events
249
+ error_msg = message.get("error", "Unknown error")
250
+ logger.error(f"ConVox error: {error_msg}")
251
+ return None
252
+
253
+ elif event == "end_call" or event == "call_end":
254
+ logger.info("ConVox call end event received")
255
+ self._call_ended = True
256
+ return EndFrame()
257
+
258
+ elif event == "failed":
259
+ logger.info(f"ConVox failed event received: {message}")
260
+ self._call_ended = True
261
+ return EndFrame()
262
+
263
+ else:
264
+ logger.debug(f"Unhandled ConVox event: {event}")
265
+ return None
266
+
267
+ return None
@@ -75,6 +75,9 @@ def formatter(record: Dict[str, Any]) -> str:
75
75
  record["extra"] = {}
76
76
 
77
77
  call_id = record["extra"].get("call_id", "unknown")
78
+ if call_id is None:
79
+ call_id = "unknown"
80
+
78
81
  record["extra"]["tags"] = {
79
82
  "application": LOGGER_NAME,
80
83
  "call_id": call_id,