dv-pipecat-ai 0.0.72.dev651__tar.gz → 0.0.74.dev526__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.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/CHANGELOG.md +12 -1
  2. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/CONTRIBUTING.md +58 -18
  3. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/PKG-INFO +2 -2
  4. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/pyproject.toml +3 -4
  5. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/dv_pipecat_ai.egg-info/PKG-INFO +2 -2
  6. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/dv_pipecat_ai.egg-info/SOURCES.txt +6 -6
  7. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/dv_pipecat_ai.egg-info/requires.txt +1 -1
  8. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/pipeline/parallel_pipeline.py +3 -3
  9. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/pipeline/sync_parallel_pipeline.py +3 -3
  10. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/pipeline/task.py +23 -19
  11. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/pipeline/task_observer.py +5 -11
  12. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/consumer_processor.py +3 -2
  13. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/frame_processor.py +18 -25
  14. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/frameworks/rtvi.py +3 -3
  15. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/metrics/frame_processor_metrics.py +3 -3
  16. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/metrics/sentry.py +6 -11
  17. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/producer_processor.py +3 -3
  18. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/ai_service.py +68 -0
  19. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/ai_services.py +11 -0
  20. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/anthropic/llm.py +213 -21
  21. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/aws/llm.py +193 -20
  22. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/aws_nova_sonic/aws.py +97 -0
  23. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/aws_nova_sonic/context.py +131 -0
  24. dv_pipecat_ai-0.0.74.dev526/src/pipecat/services/aws_nova_sonic/frames.py +25 -0
  25. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/azure/llm.py +17 -6
  26. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/cartesia/tts.py +145 -2
  27. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/cerebras/llm.py +22 -11
  28. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/deepgram/stt.py +68 -0
  29. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/deepseek/llm.py +22 -12
  30. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/elevenlabs/tts.py +3 -3
  31. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/fireworks/llm.py +24 -6
  32. dv_pipecat_ai-0.0.74.dev526/src/pipecat/services/gemini_multimodal_live/events.py +449 -0
  33. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/gemini_multimodal_live/gemini.py +195 -38
  34. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/gladia/stt.py +3 -5
  35. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/google/llm.py +154 -17
  36. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/google/llm_openai.py +2 -4
  37. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/google/stt.py +2 -2
  38. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/grok/llm.py +54 -18
  39. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/groq/llm.py +16 -5
  40. dv_pipecat_ai-0.0.74.dev526/src/pipecat/services/image_service.py +70 -0
  41. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/llm_service.py +149 -41
  42. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/mcp_service.py +101 -24
  43. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/neuphonic/tts.py +3 -5
  44. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/nim/llm.py +14 -8
  45. dv_pipecat_ai-0.0.74.dev526/src/pipecat/services/ollama/llm.py +25 -0
  46. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/openai/base_llm.py +68 -9
  47. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/openai/llm.py +82 -6
  48. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/openai_realtime_beta/azure.py +14 -11
  49. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/openai_realtime_beta/context.py +85 -0
  50. dv_pipecat_ai-0.0.74.dev526/src/pipecat/services/openai_realtime_beta/events.py +978 -0
  51. dv_pipecat_ai-0.0.74.dev526/src/pipecat/services/openai_realtime_beta/frames.py +37 -0
  52. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/openai_realtime_beta/openai.py +94 -16
  53. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/openpipe/llm.py +41 -0
  54. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/openrouter/llm.py +21 -4
  55. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/perplexity/llm.py +19 -9
  56. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/qwen/llm.py +16 -5
  57. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/riva/stt.py +2 -4
  58. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/sambanova/llm.py +37 -10
  59. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/simli/video.py +3 -7
  60. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/stt_service.py +89 -10
  61. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/tavus/video.py +2 -2
  62. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/together/llm.py +16 -5
  63. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/tts_service.py +237 -32
  64. dv_pipecat_ai-0.0.74.dev526/src/pipecat/services/vision_service.py +71 -0
  65. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/websocket_service.py +46 -20
  66. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/base_output.py +2 -4
  67. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/network/fastapi_websocket.py +2 -2
  68. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/network/small_webrtc.py +3 -3
  69. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/network/websocket_client.py +1 -1
  70. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/services/daily.py +6 -11
  71. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/services/livekit.py +3 -5
  72. dv_pipecat_ai-0.0.72.dev651/src/pipecat/utils/asyncio.py → dv_pipecat_ai-0.0.74.dev526/src/pipecat/utils/asyncio/task_manager.py +26 -10
  73. {dv_pipecat_ai-0.0.72.dev651/src/pipecat/utils → dv_pipecat_ai-0.0.74.dev526/src/pipecat/utils/asyncio}/watchdog_async_iterator.py +6 -8
  74. {dv_pipecat_ai-0.0.72.dev651/src/pipecat/utils → dv_pipecat_ai-0.0.74.dev526/src/pipecat/utils/asyncio}/watchdog_event.py +6 -8
  75. {dv_pipecat_ai-0.0.72.dev651/src/pipecat/utils → dv_pipecat_ai-0.0.74.dev526/src/pipecat/utils/asyncio}/watchdog_priority_queue.py +8 -10
  76. {dv_pipecat_ai-0.0.72.dev651/src/pipecat/utils → dv_pipecat_ai-0.0.74.dev526/src/pipecat/utils/asyncio}/watchdog_queue.py +8 -10
  77. dv_pipecat_ai-0.0.74.dev526/src/pipecat/utils/text/__init__.py +0 -0
  78. dv_pipecat_ai-0.0.72.dev651/src/pipecat/services/aws_nova_sonic/frames.py +0 -14
  79. dv_pipecat_ai-0.0.72.dev651/src/pipecat/services/gemini_multimodal_live/events.py +0 -237
  80. dv_pipecat_ai-0.0.72.dev651/src/pipecat/services/image_service.py +0 -33
  81. dv_pipecat_ai-0.0.72.dev651/src/pipecat/services/ollama/llm.py +0 -12
  82. dv_pipecat_ai-0.0.72.dev651/src/pipecat/services/openai_realtime_beta/events.py +0 -484
  83. dv_pipecat_ai-0.0.72.dev651/src/pipecat/services/openai_realtime_beta/frames.py +0 -19
  84. dv_pipecat_ai-0.0.72.dev651/src/pipecat/services/vision_service.py +0 -34
  85. dv_pipecat_ai-0.0.72.dev651/src/pipecat/utils/watchdog_reseter.py +0 -13
  86. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.dockerignore +0 -0
  87. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
  88. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
  89. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
  90. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
  91. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
  92. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
  93. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
  94. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  95. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  96. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/workflows/android.yaml +0 -0
  97. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/workflows/build.yaml +0 -0
  98. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/workflows/coverage.yaml +0 -0
  99. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/workflows/format.yaml +0 -0
  100. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/workflows/github.yml +0 -0
  101. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/workflows/publish.yaml +0 -0
  102. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/workflows/publish_test.yaml +0 -0
  103. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.github/workflows/tests.yaml +0 -0
  104. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.gitignore +0 -0
  105. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.pre-commit-config.yaml +0 -0
  106. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/.readthedocs.yaml +0 -0
  107. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/CHANGELOG.md.template +0 -0
  108. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/Dockerfile +0 -0
  109. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/LICENSE +0 -0
  110. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/MANIFEST.in +0 -0
  111. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/README.md +0 -0
  112. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/ansible.cfg +0 -0
  113. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/ansible_deployment.sh +0 -0
  114. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/cleanup_old_containers.yml +0 -0
  115. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/codecov.yml +0 -0
  116. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/create-new-machine/ansible.cfg +0 -0
  117. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/create-new-machine/ansible_setup.sh +0 -0
  118. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/create-new-machine/inventory.ini +0 -0
  119. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/create-new-machine/replace_env.yml +0 -0
  120. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/create-new-machine/setup_playbook.yml +0 -0
  121. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/create_inventory.py +0 -0
  122. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/delete_old_dockers.sh +0 -0
  123. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/deploy.sh +0 -0
  124. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/deploy_playbook.yml +0 -0
  125. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/dev-requirements.txt +0 -0
  126. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/docker-compose.dev.yml +0 -0
  127. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/dot-env.template +0 -0
  128. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/dump_logs.yml +0 -0
  129. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/fetch_logs.yml +0 -0
  130. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/inventory.ini +0 -0
  131. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/k8s/dv-pipecat/.helmignore +0 -0
  132. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/k8s/dv-pipecat/Chart.yaml +0 -0
  133. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
  134. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
  135. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
  136. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
  137. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
  138. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/k8s/dv-pipecat/templates/service.yaml +0 -0
  139. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/k8s/dv-pipecat/values-prod.yaml +0 -0
  140. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/k8s/dv-pipecat/values-stage.yaml +0 -0
  141. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/k8s/dv-pipecat/values.yaml +0 -0
  142. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/merge-code-into-single-file.sh +0 -0
  143. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/pipecat.png +0 -0
  144. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/restart.sh +0 -0
  145. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/restart_playbook.yml +0 -0
  146. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/setup.cfg +0 -0
  147. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
  148. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
  149. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/__init__.py +0 -0
  150. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/adapters/__init__.py +0 -0
  151. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/adapters/base_llm_adapter.py +0 -0
  152. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/adapters/schemas/__init__.py +0 -0
  153. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/adapters/schemas/function_schema.py +0 -0
  154. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
  155. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/adapters/services/__init__.py +0 -0
  156. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
  157. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
  158. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
  159. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
  160. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
  161. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
  162. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/__init__.py +0 -0
  163. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/filters/__init__.py +0 -0
  164. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
  165. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/filters/koala_filter.py +0 -0
  166. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/filters/krisp_filter.py +0 -0
  167. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
  168. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/interruptions/__init__.py +0 -0
  169. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
  170. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
  171. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/mixers/__init__.py +0 -0
  172. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
  173. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
  174. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/resamplers/__init__.py +0 -0
  175. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
  176. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
  177. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
  178. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/turn/__init__.py +0 -0
  179. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
  180. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
  181. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
  182. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
  183. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
  184. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
  185. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
  186. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/utils.py +0 -0
  187. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/vad/__init__.py +0 -0
  188. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/vad/data/__init__.py +0 -0
  189. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
  190. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/vad/silero.py +0 -0
  191. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
  192. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/clocks/__init__.py +0 -0
  193. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/clocks/base_clock.py +0 -0
  194. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/clocks/system_clock.py +0 -0
  195. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/examples/__init__.py +0 -0
  196. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/examples/daily_runner.py +0 -0
  197. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/examples/run.py +0 -0
  198. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/frames/__init__.py +0 -0
  199. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/frames/frames.proto +0 -0
  200. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/frames/frames.py +0 -0
  201. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
  202. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/metrics/__init__.py +0 -0
  203. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/metrics/metrics.py +0 -0
  204. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/observers/__init__.py +0 -0
  205. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/observers/base_observer.py +0 -0
  206. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/observers/loggers/__init__.py +0 -0
  207. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
  208. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
  209. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
  210. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
  211. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/observers/turn_tracking_observer.py +0 -0
  212. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/pipeline/__init__.py +0 -0
  213. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/pipeline/base_pipeline.py +0 -0
  214. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/pipeline/base_task.py +0 -0
  215. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/pipeline/pipeline.py +0 -0
  216. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/pipeline/runner.py +0 -0
  217. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
  218. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/__init__.py +0 -0
  219. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/aggregators/__init__.py +0 -0
  220. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/aggregators/dtmf_aggregator.py +0 -0
  221. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/aggregators/gated.py +0 -0
  222. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/aggregators/gated_openai_llm_context.py +0 -0
  223. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/aggregators/llm_response.py +0 -0
  224. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
  225. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/aggregators/sentence.py +0 -0
  226. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/aggregators/user_response.py +0 -0
  227. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
  228. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/async_generator.py +0 -0
  229. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/audio/__init__.py +0 -0
  230. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
  231. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/dtmf_aggregator.py +0 -0
  232. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/filters/__init__.py +0 -0
  233. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/filters/frame_filter.py +0 -0
  234. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/filters/function_filter.py +0 -0
  235. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/filters/identity_filter.py +0 -0
  236. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/filters/null_filter.py +0 -0
  237. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
  238. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
  239. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
  240. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/frameworks/__init__.py +0 -0
  241. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/frameworks/langchain.py +0 -0
  242. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/gstreamer/__init__.py +0 -0
  243. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
  244. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/idle_frame_processor.py +0 -0
  245. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/logger.py +0 -0
  246. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/metrics/__init__.py +0 -0
  247. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/text_transformer.py +0 -0
  248. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/transcript_processor.py +0 -0
  249. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
  250. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/processors/user_idle_processor.py +0 -0
  251. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/py.typed +0 -0
  252. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/serializers/__init__.py +0 -0
  253. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/serializers/base_serializer.py +0 -0
  254. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/serializers/exotel.py +0 -0
  255. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/serializers/genesys.py +0 -0
  256. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/serializers/livekit.py +0 -0
  257. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/serializers/plivo.py +0 -0
  258. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/serializers/protobuf.py +0 -0
  259. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/serializers/telnyx.py +0 -0
  260. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/serializers/twilio.py +0 -0
  261. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/__init__.py +0 -0
  262. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/anthropic/__init__.py +0 -0
  263. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/assemblyai/__init__.py +0 -0
  264. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/assemblyai/models.py +0 -0
  265. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/assemblyai/stt.py +0 -0
  266. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/aws/__init__.py +0 -0
  267. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/aws/stt.py +0 -0
  268. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/aws/tts.py +0 -0
  269. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/aws/utils.py +0 -0
  270. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
  271. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/aws_nova_sonic/ready.wav +0 -0
  272. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/azure/__init__.py +0 -0
  273. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/azure/common.py +0 -0
  274. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/azure/image.py +0 -0
  275. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/azure/stt.py +0 -0
  276. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/azure/tts.py +0 -0
  277. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/cartesia/__init__.py +0 -0
  278. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/cartesia/stt.py +0 -0
  279. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/cerebras/__init__.py +0 -0
  280. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/deepgram/__init__.py +0 -0
  281. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/deepgram/tts.py +0 -0
  282. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/deepseek/__init__.py +0 -0
  283. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/elevenlabs/__init__.py +0 -0
  284. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/fal/__init__.py +0 -0
  285. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/fal/image.py +0 -0
  286. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/fal/stt.py +0 -0
  287. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/fireworks/__init__.py +0 -0
  288. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/fish/__init__.py +0 -0
  289. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/fish/tts.py +0 -0
  290. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
  291. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/gladia/__init__.py +0 -0
  292. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/gladia/config.py +0 -0
  293. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/google/__init__.py +0 -0
  294. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/google/frames.py +0 -0
  295. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/google/google.py +0 -0
  296. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/google/image.py +0 -0
  297. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/google/llm_vertex.py +0 -0
  298. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/google/rtvi.py +0 -0
  299. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/google/tts.py +0 -0
  300. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/grok/__init__.py +0 -0
  301. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/groq/__init__.py +0 -0
  302. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/groq/stt.py +0 -0
  303. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/groq/tts.py +0 -0
  304. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/lmnt/__init__.py +0 -0
  305. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/lmnt/tts.py +0 -0
  306. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/mem0/__init__.py +0 -0
  307. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/mem0/memory.py +0 -0
  308. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/minimax/__init__.py +0 -0
  309. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/minimax/tts.py +0 -0
  310. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/moondream/__init__.py +0 -0
  311. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/moondream/vision.py +0 -0
  312. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/neuphonic/__init__.py +0 -0
  313. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/nim/__init__.py +0 -0
  314. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/ollama/__init__.py +0 -0
  315. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/openai/__init__.py +0 -0
  316. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/openai/image.py +0 -0
  317. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/openai/stt.py +0 -0
  318. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/openai/tts.py +0 -0
  319. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/openai.py +0 -0
  320. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
  321. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/openpipe/__init__.py +0 -0
  322. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/openrouter/__init__.py +0 -0
  323. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/perplexity/__init__.py +0 -0
  324. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/piper/__init__.py +0 -0
  325. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/piper/tts.py +0 -0
  326. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/playht/__init__.py +0 -0
  327. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/playht/tts.py +0 -0
  328. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/qwen/__init__.py +0 -0
  329. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/rime/__init__.py +0 -0
  330. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/rime/tts.py +0 -0
  331. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/riva/__init__.py +0 -0
  332. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/riva/tts.py +0 -0
  333. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/sambanova/__init__.py +0 -0
  334. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/sambanova/stt.py +0 -0
  335. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/sarvam/__init__.py +0 -0
  336. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/sarvam/tts.py +0 -0
  337. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/simli/__init__.py +0 -0
  338. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/tavus/__init__.py +0 -0
  339. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/together/__init__.py +0 -0
  340. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/ultravox/__init__.py +0 -0
  341. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/ultravox/stt.py +0 -0
  342. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/whisper/__init__.py +0 -0
  343. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/whisper/base_stt.py +0 -0
  344. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/whisper/stt.py +0 -0
  345. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/xtts/__init__.py +0 -0
  346. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/services/xtts/tts.py +0 -0
  347. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/sync/__init__.py +0 -0
  348. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/sync/base_notifier.py +0 -0
  349. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/sync/event_notifier.py +0 -0
  350. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/tests/__init__.py +0 -0
  351. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/tests/utils.py +0 -0
  352. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transcriptions/__init__.py +0 -0
  353. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transcriptions/language.py +0 -0
  354. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/__init__.py +0 -0
  355. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/base_input.py +0 -0
  356. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/base_transport.py +0 -0
  357. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/local/__init__.py +0 -0
  358. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/local/audio.py +0 -0
  359. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/local/tk.py +0 -0
  360. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/network/__init__.py +0 -0
  361. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/network/webrtc_connection.py +0 -0
  362. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/network/websocket_server.py +0 -0
  363. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/services/__init__.py +0 -0
  364. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/services/helpers/__init__.py +0 -0
  365. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
  366. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/transports/services/tavus.py +0 -0
  367. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/__init__.py +0 -0
  368. {dv_pipecat_ai-0.0.72.dev651/src/pipecat/utils/text → dv_pipecat_ai-0.0.74.dev526/src/pipecat/utils/asyncio}/__init__.py +0 -0
  369. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/base_object.py +0 -0
  370. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/logger_config.py +0 -0
  371. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/network.py +0 -0
  372. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/string.py +0 -0
  373. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
  374. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/text/base_text_filter.py +0 -0
  375. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
  376. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
  377. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
  378. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
  379. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/time.py +0 -0
  380. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/tracing/__init__.py +0 -0
  381. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/tracing/class_decorators.py +0 -0
  382. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
  383. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/tracing/service_attributes.py +0 -0
  384. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/tracing/service_decorators.py +0 -0
  385. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/tracing/setup.py +0 -0
  386. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
  387. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
  388. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/src/pipecat/utils/utils.py +0 -0
  389. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/stop_container.yml +0 -0
  390. {dv_pipecat_ai-0.0.72.dev651 → dv_pipecat_ai-0.0.74.dev526}/test-requirements.txt +0 -0
@@ -5,7 +5,15 @@ All notable changes to **Pipecat** will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ## [Unreleased]
8
+ ## [0.0.73] - 2025-06-26
9
+
10
+ ### Fixed
11
+
12
+ - Fixed an issue introduced in 0.0.72 that would cause `ElevenLabsTTSService`,
13
+ `GladiaSTTService`, `NeuphonicTTSService` and `OpenAIRealtimeBetaLLMService`
14
+ to throw an error.
15
+
16
+ ## [0.0.72] - 2025-06-26
9
17
 
10
18
  ### Added
11
19
 
@@ -86,6 +94,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
86
94
 
87
95
  ### Fixed
88
96
 
97
+ - Fixed an issue that would cause heartbeat frames to be sent before processors
98
+ were started.
99
+
89
100
  - Fixed an event loop blocking issue when using `SentryMetrics`.
90
101
 
91
102
  - Fixed an issue in `FastAPIWebsocketClient` to ensure proper disconnection
@@ -41,36 +41,76 @@ We use Ruff for code linting and formatting. Please ensure your code passes all
41
41
 
42
42
  We follow Google-style docstrings with these specific conventions:
43
43
 
44
- - Class docstrings should fully document all parameters used in `__init__`
45
- - We don't require separate docstrings for `__init__` methods when parameters are documented in the class docstring
46
- - Property methods should have docstrings explaining their purpose and return value
44
+ **Regular Classes:**
47
45
 
48
- Example of correctly documented class:
46
+ - Class docstring describes the class purpose and documents all `__init__` parameters in an `Args:` section
47
+ - No separate `__init__` docstring needed
48
+ - All public methods must have docstrings with `Args:` and `Returns:` sections as appropriate
49
49
 
50
- ```python
51
- class MyClass:
52
- """Class description.
50
+ **Dataclasses:**
51
+
52
+ - Class docstring describes the purpose and documents all fields in a `Parameters:` section
53
+ - No `__init__` docstring (auto-generated)
54
+
55
+ **Properties:**
56
+
57
+ - Must have docstrings with `Returns:` section
58
+
59
+ **Abstract Methods:**
53
60
 
54
- Additional details about the class.
61
+ - Must have docstrings explaining what subclasses should implement
62
+
63
+ #### Examples:
64
+
65
+ ```python
66
+ # Regular class
67
+ class MyService(BaseService):
68
+ """Description of what the service does.
55
69
 
56
70
  Args:
57
- param1: Description of first parameter.
58
- param2: Description of second parameter.
71
+ param1: Description of param1.
72
+ param2: Description of param2. Defaults to True.
73
+ **kwargs: Additional arguments passed to parent.
59
74
  """
60
75
 
61
- def __init__(self, param1, param2):
62
- # No docstring required here as parameters are documented above
63
- self.param1 = param1
64
- self.param2 = param2
76
+ def __init__(self, param1: str, param2: bool = True, **kwargs):
77
+ # No docstring - parameters documented above
78
+ super().__init__(**kwargs)
65
79
 
66
80
  @property
67
- def some_property(self) -> str:
68
- """Get the formatted property value.
81
+ def sample_rate(self) -> int:
82
+ """Get the current sample rate.
69
83
 
70
84
  Returns:
71
- A string representation of the property.
85
+ The sample rate in Hz.
72
86
  """
73
- return f"Property: {self.param1}"
87
+ return self._sample_rate
88
+
89
+ async def process_data(self, data: str) -> bool:
90
+ """Process the provided data.
91
+
92
+ Args:
93
+ data: The data to process.
94
+
95
+ Returns:
96
+ True if processing succeeded.
97
+ """
98
+ pass
99
+
100
+ # Dataclass
101
+ @dataclass
102
+ class ConfigParams:
103
+ """Configuration parameters for the service.
104
+
105
+ Parameters:
106
+ host: The host address.
107
+ port: The port number. Defaults to 8080.
108
+ timeout: Connection timeout in seconds.
109
+ """
110
+
111
+ host: str
112
+ port: int = 8080
113
+ timeout: float = 30.0
74
114
  ```
75
115
 
76
116
  # Contributor Covenant Code of Conduct
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.72.dev651
3
+ Version: 0.0.74.dev526
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
@@ -84,7 +84,7 @@ Requires-Dist: websockets~=13.1; extra == "lmnt"
84
84
  Provides-Extra: local
85
85
  Requires-Dist: pyaudio~=0.2.14; extra == "local"
86
86
  Provides-Extra: mcp
87
- Requires-Dist: mcp[cli]~=1.6.0; extra == "mcp"
87
+ Requires-Dist: mcp[cli]~=1.9.4; extra == "mcp"
88
88
  Provides-Extra: mem0
89
89
  Requires-Dist: mem0ai~=0.1.94; extra == "mem0"
90
90
  Provides-Extra: mlx-whisper
@@ -64,7 +64,7 @@ langchain = [ "langchain~=0.3.20", "langchain-community~=0.3.20", "langchain-ope
64
64
  livekit = [ "livekit~=0.22.0", "livekit-api~=0.8.2", "tenacity~=9.0.0" ]
65
65
  lmnt = [ "websockets~=13.1" ]
66
66
  local = [ "pyaudio~=0.2.14" ]
67
- mcp = [ "mcp[cli]~=1.6.0" ]
67
+ mcp = [ "mcp[cli]~=1.9.4" ]
68
68
  mem0 = [ "mem0ai~=0.1.94" ]
69
69
  mlx-whisper = [ "mlx-whisper~=0.4.2" ]
70
70
  moondream = [ "einops~=0.8.0", "timm~=1.0.13", "transformers~=4.48.0" ]
@@ -123,9 +123,8 @@ select = [
123
123
  "D", # Docstring rules
124
124
  "I", # Import rules
125
125
  ]
126
- # We ignore D107 because class docstrings already document __init__ parameters
127
- # and our Sphinx configuration uses napoleon_include_init_with_doc=True
128
- ignore = ["D101", "D103", "D102", "D107"]
126
+ # Ignore requirement for __init__ docstrings
127
+ ignore = ["D107"]
129
128
 
130
129
  [tool.ruff.lint.pydocstyle]
131
130
  convention = "google"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.72.dev651
3
+ Version: 0.0.74.dev526
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
@@ -84,7 +84,7 @@ Requires-Dist: websockets~=13.1; extra == "lmnt"
84
84
  Provides-Extra: local
85
85
  Requires-Dist: pyaudio~=0.2.14; extra == "local"
86
86
  Provides-Extra: mcp
87
- Requires-Dist: mcp[cli]~=1.6.0; extra == "mcp"
87
+ Requires-Dist: mcp[cli]~=1.9.4; extra == "mcp"
88
88
  Provides-Extra: mem0
89
89
  Requires-Dist: mem0ai~=0.1.94; extra == "mem0"
90
90
  Provides-Extra: mlx-whisper
@@ -351,18 +351,18 @@ src/pipecat/transports/services/tavus.py
351
351
  src/pipecat/transports/services/helpers/__init__.py
352
352
  src/pipecat/transports/services/helpers/daily_rest.py
353
353
  src/pipecat/utils/__init__.py
354
- src/pipecat/utils/asyncio.py
355
354
  src/pipecat/utils/base_object.py
356
355
  src/pipecat/utils/logger_config.py
357
356
  src/pipecat/utils/network.py
358
357
  src/pipecat/utils/string.py
359
358
  src/pipecat/utils/time.py
360
359
  src/pipecat/utils/utils.py
361
- src/pipecat/utils/watchdog_async_iterator.py
362
- src/pipecat/utils/watchdog_event.py
363
- src/pipecat/utils/watchdog_priority_queue.py
364
- src/pipecat/utils/watchdog_queue.py
365
- src/pipecat/utils/watchdog_reseter.py
360
+ src/pipecat/utils/asyncio/__init__.py
361
+ src/pipecat/utils/asyncio/task_manager.py
362
+ src/pipecat/utils/asyncio/watchdog_async_iterator.py
363
+ src/pipecat/utils/asyncio/watchdog_event.py
364
+ src/pipecat/utils/asyncio/watchdog_priority_queue.py
365
+ src/pipecat/utils/asyncio/watchdog_queue.py
366
366
  src/pipecat/utils/text/__init__.py
367
367
  src/pipecat/utils/text/base_text_aggregator.py
368
368
  src/pipecat/utils/text/base_text_filter.py
@@ -101,7 +101,7 @@ torch==2.5.0
101
101
  torchaudio==2.5.0
102
102
 
103
103
  [mcp]
104
- mcp[cli]~=1.6.0
104
+ mcp[cli]~=1.9.4
105
105
 
106
106
  [mem0]
107
107
  mem0ai~=0.1.94
@@ -21,7 +21,7 @@ from pipecat.frames.frames import (
21
21
  from pipecat.pipeline.base_pipeline import BasePipeline
22
22
  from pipecat.pipeline.pipeline import Pipeline
23
23
  from pipecat.processors.frame_processor import FrameDirection, FrameProcessor, FrameProcessorSetup
24
- from pipecat.utils.watchdog_queue import WatchdogQueue
24
+ from pipecat.utils.asyncio.watchdog_queue import WatchdogQueue
25
25
 
26
26
 
27
27
  class ParallelPipelineSource(FrameProcessor):
@@ -102,8 +102,8 @@ class ParallelPipeline(BasePipeline):
102
102
  async def setup(self, setup: FrameProcessorSetup):
103
103
  await super().setup(setup)
104
104
 
105
- self._up_queue = WatchdogQueue(self, watchdog_enabled=setup.watchdog_timers_enabled)
106
- self._down_queue = WatchdogQueue(self, watchdog_enabled=setup.watchdog_timers_enabled)
105
+ self._up_queue = WatchdogQueue(setup.task_manager)
106
+ self._down_queue = WatchdogQueue(setup.task_manager)
107
107
 
108
108
  logger.debug(f"Creating {self} pipelines")
109
109
  for processors in self._args:
@@ -15,7 +15,7 @@ from pipecat.frames.frames import ControlFrame, EndFrame, Frame, SystemFrame
15
15
  from pipecat.pipeline.base_pipeline import BasePipeline
16
16
  from pipecat.pipeline.pipeline import Pipeline
17
17
  from pipecat.processors.frame_processor import FrameDirection, FrameProcessor, FrameProcessorSetup
18
- from pipecat.utils.watchdog_queue import WatchdogQueue
18
+ from pipecat.utils.asyncio.watchdog_queue import WatchdogQueue
19
19
 
20
20
 
21
21
  @dataclass
@@ -81,8 +81,8 @@ class SyncParallelPipeline(BasePipeline):
81
81
  async def setup(self, setup: FrameProcessorSetup):
82
82
  await super().setup(setup)
83
83
 
84
- self._up_queue = WatchdogQueue(self, watchdog_enabled=setup.watchdog_timers_enabled)
85
- self._down_queue = WatchdogQueue(self, watchdog_enabled=setup.watchdog_timers_enabled)
84
+ self._up_queue = WatchdogQueue(setup.task_manager)
85
+ self._down_queue = WatchdogQueue(setup.task_manager)
86
86
 
87
87
  logger.debug(f"Creating {self} pipelines")
88
88
  for processors in self._args:
@@ -38,11 +38,15 @@ from pipecat.pipeline.base_pipeline import BasePipeline
38
38
  from pipecat.pipeline.base_task import BasePipelineTask, PipelineTaskParams
39
39
  from pipecat.pipeline.task_observer import TaskObserver
40
40
  from pipecat.processors.frame_processor import FrameDirection, FrameProcessor, FrameProcessorSetup
41
- from pipecat.utils.asyncio import WATCHDOG_TIMEOUT, BaseTaskManager, TaskManager, TaskManagerParams
41
+ from pipecat.utils.asyncio.task_manager import (
42
+ WATCHDOG_TIMEOUT,
43
+ BaseTaskManager,
44
+ TaskManager,
45
+ TaskManagerParams,
46
+ )
47
+ from pipecat.utils.asyncio.watchdog_queue import WatchdogQueue
42
48
  from pipecat.utils.tracing.setup import is_tracing_available
43
49
  from pipecat.utils.tracing.turn_trace_observer import TurnTraceObserver
44
- from pipecat.utils.watchdog_queue import WatchdogQueue
45
- from pipecat.utils.watchdog_reseter import WatchdogReseter
46
50
 
47
51
  HEARTBEAT_SECONDS = 1.0
48
52
  HEARTBEAT_MONITOR_SECONDS = HEARTBEAT_SECONDS * 10
@@ -133,7 +137,7 @@ class PipelineTaskSink(FrameProcessor):
133
137
  await self._down_queue.put(frame)
134
138
 
135
139
 
136
- class PipelineTask(WatchdogReseter, BasePipelineTask):
140
+ class PipelineTask(BasePipelineTask):
137
141
  """Manages the execution of a pipeline, handling frame processing and task lifecycle.
138
142
 
139
143
  It has a couple of event handlers `on_frame_reached_upstream` and
@@ -265,24 +269,28 @@ class PipelineTask(WatchdogReseter, BasePipelineTask):
265
269
  self._finished = False
266
270
  self._cancelled = False
267
271
 
272
+ # This task maneger will handle all the asyncio tasks created by this
273
+ # PipelineTask and its frame processors.
274
+ self._task_manager = task_manager or TaskManager()
275
+
268
276
  # This queue receives frames coming from the pipeline upstream.
269
- self._up_queue = WatchdogQueue(self, watchdog_enabled=enable_watchdog_timers)
277
+ self._up_queue = WatchdogQueue(self._task_manager)
270
278
  self._process_up_task: Optional[asyncio.Task] = None
271
279
  # This queue receives frames coming from the pipeline downstream.
272
- self._down_queue = WatchdogQueue(self, watchdog_enabled=enable_watchdog_timers)
280
+ self._down_queue = WatchdogQueue(self._task_manager)
273
281
  self._process_down_task: Optional[asyncio.Task] = None
274
282
  # This queue is the queue used to push frames to the pipeline.
275
- self._push_queue = WatchdogQueue(self, watchdog_enabled=enable_watchdog_timers)
283
+ self._push_queue = WatchdogQueue(self._task_manager)
276
284
  self._process_push_task: Optional[asyncio.Task] = None
277
285
  # This is the heartbeat queue. When a heartbeat frame is received in the
278
286
  # down queue we add it to the heartbeat queue for processing.
279
- self._heartbeat_queue = WatchdogQueue(self, watchdog_enabled=enable_watchdog_timers)
287
+ self._heartbeat_queue = WatchdogQueue(self._task_manager)
280
288
  self._heartbeat_push_task: Optional[asyncio.Task] = None
281
289
  self._heartbeat_monitor_task: Optional[asyncio.Task] = None
282
290
  # This is the idle queue. When frames are received downstream they are
283
291
  # put in the queue. If no frame is received the pipeline is considered
284
292
  # idle.
285
- self._idle_queue = WatchdogQueue(self, watchdog_enabled=enable_watchdog_timers)
293
+ self._idle_queue = WatchdogQueue(self._task_manager)
286
294
  self._idle_monitor_task: Optional[asyncio.Task] = None
287
295
  # This event is used to indicate a finalize frame (e.g. EndFrame,
288
296
  # StopFrame) has been received in the down queue.
@@ -300,10 +308,6 @@ class PipelineTask(WatchdogReseter, BasePipelineTask):
300
308
  self._sink = PipelineTaskSink(self._down_queue)
301
309
  pipeline.link(self._sink)
302
310
 
303
- # This task maneger will handle all the asyncio tasks created by this
304
- # PipelineTask and its frame processors.
305
- self._task_manager = task_manager or TaskManager()
306
-
307
311
  # The task observer acts as a proxy to the provided observers. This way,
308
312
  # we only need to pass a single observer (using the StartFrame) which
309
313
  # then just acts as a proxy.
@@ -435,9 +439,6 @@ class PipelineTask(WatchdogReseter, BasePipelineTask):
435
439
  for frame in frames:
436
440
  await self.queue_frame(frame)
437
441
 
438
- def reset_watchdog(self):
439
- self._task_manager.reset_watchdog(asyncio.current_task())
440
-
441
442
  async def _cancel(self):
442
443
  if not self._cancelled:
443
444
  logger.debug(f"Canceling pipeline task {self}")
@@ -462,12 +463,12 @@ class PipelineTask(WatchdogReseter, BasePipelineTask):
462
463
  self._process_push_queue(), f"{self}::_process_push_queue"
463
464
  )
464
465
 
465
- await self._observer.start(self._enable_watchdog_timers)
466
+ await self._observer.start()
466
467
 
467
468
  return self._process_push_task
468
469
 
469
470
  def _maybe_start_heartbeat_tasks(self):
470
- if self._params.enable_heartbeats:
471
+ if self._params.enable_heartbeats and self._heartbeat_push_task is None:
471
472
  self._heartbeat_push_task = self._task_manager.create_task(
472
473
  self._heartbeat_push_handler(), f"{self}::_heartbeat_push_handler"
473
474
  )
@@ -565,7 +566,6 @@ class PipelineTask(WatchdogReseter, BasePipelineTask):
565
566
  """
566
567
  self._clock.start()
567
568
 
568
- self._maybe_start_heartbeat_tasks()
569
569
  self._maybe_start_idle_task()
570
570
 
571
571
  start_frame = StartFrame(
@@ -647,6 +647,10 @@ class PipelineTask(WatchdogReseter, BasePipelineTask):
647
647
 
648
648
  if isinstance(frame, StartFrame):
649
649
  await self._call_event_handler("on_pipeline_started", frame)
650
+
651
+ # Start heartbeat tasks now that StartFrame has been processed
652
+ # by all processors in the pipeline
653
+ self._maybe_start_heartbeat_tasks()
650
654
  elif isinstance(frame, EndFrame):
651
655
  await self._call_event_handler("on_pipeline_ended", frame)
652
656
  self._pipeline_end_event.set()
@@ -11,9 +11,8 @@ from typing import Dict, List, Optional
11
11
  from attr import dataclass
12
12
 
13
13
  from pipecat.observers.base_observer import BaseObserver, FramePushed
14
- from pipecat.utils.asyncio import BaseTaskManager
15
- from pipecat.utils.watchdog_queue import WatchdogQueue
16
- from pipecat.utils.watchdog_reseter import WatchdogReseter
14
+ from pipecat.utils.asyncio.task_manager import BaseTaskManager
15
+ from pipecat.utils.asyncio.watchdog_queue import WatchdogQueue
17
16
 
18
17
 
19
18
  @dataclass
@@ -28,7 +27,7 @@ class Proxy:
28
27
  observer: BaseObserver
29
28
 
30
29
 
31
- class TaskObserver(WatchdogReseter, BaseObserver):
30
+ class TaskObserver(BaseObserver):
32
31
  """This is a pipeline frame observer that is meant to be used as a proxy to
33
32
  the user provided observers. That is, this is the observer that should be
34
33
  passed to the frame processors. Then, every time a frame is pushed this
@@ -54,7 +53,6 @@ class TaskObserver(WatchdogReseter, BaseObserver):
54
53
  self._proxies: Optional[Dict[BaseObserver, Proxy]] = (
55
54
  None # Becomes a dict after start() is called
56
55
  )
57
- self._watchdog_timers_enabled = False
58
56
 
59
57
  def add_observer(self, observer: BaseObserver):
60
58
  # Add the observer to the list.
@@ -79,9 +77,8 @@ class TaskObserver(WatchdogReseter, BaseObserver):
79
77
  if observer in self._observers:
80
78
  self._observers.remove(observer)
81
79
 
82
- async def start(self, watchdog_timers_enabled: bool = False):
80
+ async def start(self):
83
81
  """Starts all proxy observer tasks."""
84
- self._watchdog_timers_enabled = watchdog_timers_enabled
85
82
  self._proxies = self._create_proxies(self._observers)
86
83
 
87
84
  async def stop(self):
@@ -96,14 +93,11 @@ class TaskObserver(WatchdogReseter, BaseObserver):
96
93
  for proxy in self._proxies.values():
97
94
  await proxy.queue.put(data)
98
95
 
99
- def reset_watchdog(self):
100
- self._task_manager.reset_watchdog(asyncio.current_task())
101
-
102
96
  def _started(self) -> bool:
103
97
  return self._proxies is not None
104
98
 
105
99
  def _create_proxy(self, observer: BaseObserver) -> Proxy:
106
- queue = WatchdogQueue(self, watchdog_enabled=self._watchdog_timers_enabled)
100
+ queue = WatchdogQueue(self._task_manager)
107
101
  task = self._task_manager.create_task(
108
102
  self._proxy_task_handler(queue, observer),
109
103
  f"TaskObserver::{observer}::_proxy_task_handler",
@@ -10,7 +10,7 @@ from typing import Awaitable, Callable, Optional
10
10
  from pipecat.frames.frames import CancelFrame, EndFrame, Frame, StartFrame
11
11
  from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
12
12
  from pipecat.processors.producer_processor import ProducerProcessor, identity_transformer
13
- from pipecat.utils.watchdog_queue import WatchdogQueue
13
+ from pipecat.utils.asyncio.watchdog_queue import WatchdogQueue
14
14
 
15
15
 
16
16
  class ConsumerProcessor(FrameProcessor):
@@ -32,7 +32,7 @@ class ConsumerProcessor(FrameProcessor):
32
32
  super().__init__(**kwargs)
33
33
  self._transformer = transformer
34
34
  self._direction = direction
35
- self._queue: WatchdogQueue = producer.add_consumer(self)
35
+ self._producer = producer
36
36
  self._consumer_task: Optional[asyncio.Task] = None
37
37
 
38
38
  async def process_frame(self, frame: Frame, direction: FrameDirection):
@@ -49,6 +49,7 @@ class ConsumerProcessor(FrameProcessor):
49
49
 
50
50
  async def _start(self, _: StartFrame):
51
51
  if not self._consumer_task:
52
+ self._queue: WatchdogQueue = self._producer.add_consumer()
52
53
  self._consumer_task = self.create_task(self._consumer_task_handler())
53
54
 
54
55
  async def _stop(self, _: EndFrame):
@@ -29,11 +29,10 @@ from pipecat.frames.frames import (
29
29
  from pipecat.metrics.metrics import LLMTokenUsage, MetricsData
30
30
  from pipecat.observers.base_observer import BaseObserver, FramePushed
31
31
  from pipecat.processors.metrics.frame_processor_metrics import FrameProcessorMetrics
32
- from pipecat.utils.asyncio import BaseTaskManager
32
+ from pipecat.utils.asyncio.task_manager import BaseTaskManager
33
+ from pipecat.utils.asyncio.watchdog_event import WatchdogEvent
34
+ from pipecat.utils.asyncio.watchdog_queue import WatchdogQueue
33
35
  from pipecat.utils.base_object import BaseObject
34
- from pipecat.utils.watchdog_event import WatchdogEvent
35
- from pipecat.utils.watchdog_queue import WatchdogQueue
36
- from pipecat.utils.watchdog_reseter import WatchdogReseter
37
36
 
38
37
 
39
38
  class FrameDirection(Enum):
@@ -49,7 +48,7 @@ class FrameProcessorSetup:
49
48
  watchdog_timers_enabled: bool = False
50
49
 
51
50
 
52
- class FrameProcessor(WatchdogReseter, BaseObject):
51
+ class FrameProcessor(BaseObject):
53
52
  def __init__(
54
53
  self,
55
54
  *,
@@ -89,7 +88,6 @@ class FrameProcessor(WatchdogReseter, BaseObject):
89
88
  self._enable_usage_metrics = False
90
89
  self._report_only_initial_ttfb = False
91
90
  self._interruption_strategies: List[BaseInterruptionStrategy] = []
92
- self._watchdog_timers_enabled = False
93
91
 
94
92
  # Indicates whether we have received the StartFrame.
95
93
  self.__started = False
@@ -148,8 +146,10 @@ class FrameProcessor(WatchdogReseter, BaseObject):
148
146
  return self._interruption_strategies
149
147
 
150
148
  @property
151
- def watchdog_timers_enabled(self):
152
- return self._watchdog_timers_enabled
149
+ def task_manager(self) -> BaseTaskManager:
150
+ if not self._task_manager:
151
+ raise Exception(f"{self} TaskManager is still not initialized.")
152
+ return self._task_manager
153
153
 
154
154
  def can_generate_metrics(self) -> bool:
155
155
  return False
@@ -206,7 +206,7 @@ class FrameProcessor(WatchdogReseter, BaseObject):
206
206
  name = f"{self}::{name}"
207
207
  else:
208
208
  name = f"{self}::{coroutine.cr_code.co_name}"
209
- return self.get_task_manager().create_task(
209
+ return self.task_manager.create_task(
210
210
  coroutine,
211
211
  name,
212
212
  enable_watchdog_logging=(
@@ -215,7 +215,7 @@ class FrameProcessor(WatchdogReseter, BaseObject):
215
215
  else self._enable_watchdog_logging
216
216
  ),
217
217
  enable_watchdog_timers=(
218
- enable_watchdog_timers if enable_watchdog_timers else self.watchdog_timers_enabled
218
+ enable_watchdog_timers if enable_watchdog_timers else self._enable_watchdog_timers
219
219
  ),
220
220
  watchdog_timeout=(
221
221
  watchdog_timeout_secs if watchdog_timeout_secs else self._watchdog_timeout_secs
@@ -223,13 +223,13 @@ class FrameProcessor(WatchdogReseter, BaseObject):
223
223
  )
224
224
 
225
225
  async def cancel_task(self, task: asyncio.Task, timeout: Optional[float] = None):
226
- await self.get_task_manager().cancel_task(task, timeout)
226
+ await self.task_manager.cancel_task(task, timeout)
227
227
 
228
228
  async def wait_for_task(self, task: asyncio.Task, timeout: Optional[float] = None):
229
- await self.get_task_manager().wait_for_task(task, timeout)
229
+ await self.task_manager.wait_for_task(task, timeout)
230
230
 
231
231
  def reset_watchdog(self):
232
- self.get_task_manager().reset_watchdog(asyncio.current_task())
232
+ self.task_manager.task_reset_watchdog()
233
233
 
234
234
  async def setup(self, setup: FrameProcessorSetup):
235
235
  self._clock = setup.clock
@@ -241,7 +241,7 @@ class FrameProcessor(WatchdogReseter, BaseObject):
241
241
  else setup.watchdog_timers_enabled
242
242
  )
243
243
  if self._metrics is not None:
244
- await self._metrics.setup(self._task_manager, self._watchdog_timers_enabled)
244
+ await self._metrics.setup(self._task_manager)
245
245
 
246
246
  async def cleanup(self):
247
247
  await super().cleanup()
@@ -256,7 +256,7 @@ class FrameProcessor(WatchdogReseter, BaseObject):
256
256
  self.logger.debug(f"Linking {self} -> {self._next}")
257
257
 
258
258
  def get_event_loop(self) -> asyncio.AbstractEventLoop:
259
- return self.get_task_manager().get_event_loop()
259
+ return self.task_manager.get_event_loop()
260
260
 
261
261
  def set_parent(self, parent: "FrameProcessor"):
262
262
  self._parent = parent
@@ -269,11 +269,6 @@ class FrameProcessor(WatchdogReseter, BaseObject):
269
269
  raise Exception(f"{self} Clock is still not initialized.")
270
270
  return self._clock
271
271
 
272
- def get_task_manager(self) -> BaseTaskManager:
273
- if not self._task_manager:
274
- raise Exception(f"{self} TaskManager is still not initialized.")
275
- return self._task_manager
276
-
277
272
  async def queue_frame(
278
273
  self,
279
274
  frame: Frame,
@@ -424,11 +419,9 @@ class FrameProcessor(WatchdogReseter, BaseObject):
424
419
  if not self.__input_frame_task:
425
420
  self.__should_block_frames = False
426
421
  if not self.__input_event:
427
- self.__input_event = WatchdogEvent(
428
- self, watchdog_enabled=self.watchdog_timers_enabled
429
- )
422
+ self.__input_event = WatchdogEvent(self.task_manager)
430
423
  self.__input_event.clear()
431
- self.__input_queue = WatchdogQueue(self, watchdog_enabled=self.watchdog_timers_enabled)
424
+ self.__input_queue = WatchdogQueue(self.task_manager)
432
425
  self.__input_frame_task = self.create_task(self.__input_frame_task_handler())
433
426
 
434
427
  async def __cancel_input_task(self):
@@ -460,7 +453,7 @@ class FrameProcessor(WatchdogReseter, BaseObject):
460
453
 
461
454
  def __create_push_task(self):
462
455
  if not self.__push_frame_task:
463
- self.__push_queue = WatchdogQueue(self, watchdog_enabled=self.watchdog_timers_enabled)
456
+ self.__push_queue = WatchdogQueue(self.task_manager)
464
457
  self.__push_frame_task = self.create_task(self.__push_frame_task_handler())
465
458
 
466
459
  async def __cancel_push_task(self):
@@ -67,8 +67,8 @@ from pipecat.services.llm_service import (
67
67
  from pipecat.transports.base_input import BaseInputTransport
68
68
  from pipecat.transports.base_output import BaseOutputTransport
69
69
  from pipecat.transports.base_transport import BaseTransport
70
+ from pipecat.utils.asyncio.watchdog_queue import WatchdogQueue
70
71
  from pipecat.utils.string import match_endofsentence
71
- from pipecat.utils.watchdog_queue import WatchdogQueue
72
72
 
73
73
  RTVI_PROTOCOL_VERSION = "0.3.0"
74
74
 
@@ -755,10 +755,10 @@ class RTVIProcessor(FrameProcessor):
755
755
 
756
756
  async def _start(self, frame: StartFrame):
757
757
  if not self._action_task:
758
- self._action_queue = WatchdogQueue(self, watchdog_enabled=self.watchdog_timers_enabled)
758
+ self._action_queue = WatchdogQueue(self.task_manager)
759
759
  self._action_task = self.create_task(self._action_task_handler())
760
760
  if not self._message_task:
761
- self._message_queue = WatchdogQueue(self, watchdog_enabled=self.watchdog_timers_enabled)
761
+ self._message_queue = WatchdogQueue(self.task_manager)
762
762
  self._message_task = self.create_task(self._message_task_handler())
763
763
  await self._call_event_handler("on_bot_started")
764
764
 
@@ -18,7 +18,7 @@ from pipecat.metrics.metrics import (
18
18
  TTFBMetricsData,
19
19
  TTSUsageMetricsData,
20
20
  )
21
- from pipecat.utils.asyncio import TaskManager
21
+ from pipecat.utils.asyncio.task_manager import BaseTaskManager
22
22
  from pipecat.utils.base_object import BaseObject
23
23
 
24
24
 
@@ -32,14 +32,14 @@ class FrameProcessorMetrics(BaseObject):
32
32
  self._should_report_ttfb = True
33
33
  self._logger = logger
34
34
 
35
- async def setup(self, task_manager: TaskManager, watchdog_timers_enabled: bool = False):
35
+ async def setup(self, task_manager: BaseTaskManager):
36
36
  self._task_manager = task_manager
37
37
 
38
38
  async def cleanup(self):
39
39
  await super().cleanup()
40
40
 
41
41
  @property
42
- def task_manager(self) -> TaskManager:
42
+ def task_manager(self) -> BaseTaskManager:
43
43
  return self._task_manager
44
44
 
45
45
  @property