dv-pipecat-ai 0.0.93.dev2__tar.gz → 0.0.93.dev3__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 (514) hide show
  1. {dv_pipecat_ai-0.0.93.dev2/src/dv_pipecat_ai.egg-info → dv_pipecat_ai-0.0.93.dev3}/PKG-INFO +1 -1
  2. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3/src/dv_pipecat_ai.egg-info}/PKG-INFO +1 -1
  3. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/dv_pipecat_ai.egg-info/SOURCES.txt +3 -0
  4. dv_pipecat_ai-0.0.93.dev3/src/pipecat/adapters/services/open_ai_responses_adapter.py +242 -0
  5. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/aggregators/llm_response_universal.py +104 -7
  6. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai/__init__.py +1 -0
  7. dv_pipecat_ai-0.0.93.dev3/src/pipecat/services/openai/responses/llm.py +572 -0
  8. dv_pipecat_ai-0.0.93.dev3/src/pipecat/services/speechmatics/__init__.py +5 -0
  9. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/tracing/service_decorators.py +8 -2
  10. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.dockerignore +0 -0
  11. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
  12. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
  13. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
  14. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
  15. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
  16. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
  17. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
  18. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  19. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  20. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/workflows/build.yaml +0 -0
  21. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/workflows/coverage.yaml +0 -0
  22. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/workflows/force_push_to_pypi.yml +0 -0
  23. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/workflows/format.yaml +0 -0
  24. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/workflows/github.yml +0 -0
  25. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/workflows/promote-prod.yml +0 -0
  26. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/workflows/publish.yaml +0 -0
  27. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/workflows/publish_test.yaml +0 -0
  28. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/workflows/python-compatibility.yaml +0 -0
  29. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/workflows/set-traffic-split.yml +0 -0
  30. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/workflows/sync-quickstart.yaml +0 -0
  31. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.github/workflows/tests.yaml +0 -0
  32. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.gitignore +0 -0
  33. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.pre-commit-config.yaml +0 -0
  34. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/.readthedocs.yaml +0 -0
  35. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/CHANGELOG.md +0 -0
  36. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/CHANGELOG.md.template +0 -0
  37. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/CLAUDE.md +0 -0
  38. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/COMMUNITY_INTEGRATIONS.md +0 -0
  39. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/CONTRIBUTING.md +0 -0
  40. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/DOCKER_BUILD_OPTIMIZATION_SUMMARY.md +0 -0
  41. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/LICENSE +0 -0
  42. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/MANIFEST.in +0 -0
  43. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/README.md +0 -0
  44. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/SECURITY.md +0 -0
  45. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/UPSTREAM_SYNC.md +0 -0
  46. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/ansible.cfg +0 -0
  47. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/ansible_deployment.sh +0 -0
  48. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/cleanup_old_containers.yml +0 -0
  49. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/codecov.yml +0 -0
  50. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/create-new-machine/ansible.cfg +0 -0
  51. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/create-new-machine/ansible_setup.sh +0 -0
  52. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/create-new-machine/inventory.ini +0 -0
  53. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/create-new-machine/replace_env.yml +0 -0
  54. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/create-new-machine/setup_playbook.yml +0 -0
  55. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/create_inventory.py +0 -0
  56. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/delete_old_dockers.sh +0 -0
  57. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/deploy.sh +0 -0
  58. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/deploy_playbook.yml +0 -0
  59. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/docker-compose.dev.yml +0 -0
  60. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/dump_logs.yml +0 -0
  61. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/env.example +0 -0
  62. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/fetch_logs.yml +0 -0
  63. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/inventory.ini +0 -0
  64. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/.helmignore +0 -0
  65. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/Chart.yaml +0 -0
  66. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
  67. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
  68. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/templates/cluster-role.yaml +0 -0
  69. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
  70. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
  71. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
  72. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/templates/keda-api-key-secret.yaml +0 -0
  73. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/templates/keda-scaledobject.yaml +0 -0
  74. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/templates/keda-trigger-auth.yaml +0 -0
  75. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/templates/pdb.yaml +0 -0
  76. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/templates/service.yaml +0 -0
  77. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/values-canary.yaml +0 -0
  78. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/values-prod.yaml +0 -0
  79. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/values-stage.yaml +0 -0
  80. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/dv-pipecat/values.yaml +0 -0
  81. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/k8s/istio/destination-virtualservice.yaml +0 -0
  82. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/merge-code-into-single-file.sh +0 -0
  83. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/pipecat.png +0 -0
  84. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/pyproject.toml +0 -0
  85. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/restart.sh +0 -0
  86. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/restart_playbook.yml +0 -0
  87. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/setup.cfg +0 -0
  88. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
  89. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/dv_pipecat_ai.egg-info/requires.txt +0 -0
  90. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
  91. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/__init__.py +0 -0
  92. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/adapters/__init__.py +0 -0
  93. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/adapters/base_llm_adapter.py +0 -0
  94. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/adapters/schemas/__init__.py +0 -0
  95. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/adapters/schemas/direct_function.py +0 -0
  96. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/adapters/schemas/function_schema.py +0 -0
  97. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
  98. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/adapters/services/__init__.py +0 -0
  99. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
  100. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
  101. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
  102. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
  103. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
  104. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
  105. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/__init__.py +0 -0
  106. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/dtmf/__init__.py +0 -0
  107. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/dtmf/dtmf-0.wav +0 -0
  108. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/dtmf/dtmf-1.wav +0 -0
  109. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/dtmf/dtmf-2.wav +0 -0
  110. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/dtmf/dtmf-3.wav +0 -0
  111. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/dtmf/dtmf-4.wav +0 -0
  112. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/dtmf/dtmf-5.wav +0 -0
  113. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/dtmf/dtmf-6.wav +0 -0
  114. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/dtmf/dtmf-7.wav +0 -0
  115. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/dtmf/dtmf-8.wav +0 -0
  116. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/dtmf/dtmf-9.wav +0 -0
  117. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/dtmf/dtmf-pound.wav +0 -0
  118. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/dtmf/dtmf-star.wav +0 -0
  119. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/dtmf/types.py +0 -0
  120. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/dtmf/utils.py +0 -0
  121. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/filters/__init__.py +0 -0
  122. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/filters/aic_filter.py +0 -0
  123. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
  124. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/filters/koala_filter.py +0 -0
  125. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/filters/krisp_filter.py +0 -0
  126. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/filters/krisp_viva_filter.py +0 -0
  127. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
  128. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/filters/pyrnn_local_filter.py +0 -0
  129. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/interruptions/__init__.py +0 -0
  130. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
  131. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
  132. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/mixers/__init__.py +0 -0
  133. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
  134. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
  135. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/resamplers/__init__.py +0 -0
  136. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
  137. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
  138. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
  139. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/resamplers/soxr_stream_resampler.py +0 -0
  140. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/turn/__init__.py +0 -0
  141. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
  142. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
  143. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
  144. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/turn/smart_turn/data/__init__.py +0 -0
  145. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/turn/smart_turn/data/smart-turn-v3.0.onnx +0 -0
  146. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
  147. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
  148. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
  149. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
  150. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v2.py +0 -0
  151. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v3.py +0 -0
  152. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/utils.py +0 -0
  153. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/vad/__init__.py +0 -0
  154. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/vad/data/README.md +0 -0
  155. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/vad/data/__init__.py +0 -0
  156. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
  157. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/vad/data/silero_vad_v2.onnx +0 -0
  158. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/vad/silero.py +0 -0
  159. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
  160. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/clocks/__init__.py +0 -0
  161. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/clocks/base_clock.py +0 -0
  162. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/clocks/system_clock.py +0 -0
  163. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/extensions/__init__.py +0 -0
  164. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/extensions/ivr/__init__.py +0 -0
  165. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/extensions/ivr/ivr_navigator.py +0 -0
  166. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/extensions/voicemail/__init__.py +0 -0
  167. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/extensions/voicemail/voicemail_detector.py +0 -0
  168. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/frames/__init__.py +0 -0
  169. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/frames/frames.proto +0 -0
  170. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/frames/frames.py +0 -0
  171. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
  172. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/metrics/__init__.py +0 -0
  173. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/metrics/connection_metrics.py +0 -0
  174. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/metrics/metrics.py +0 -0
  175. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/observers/__init__.py +0 -0
  176. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/observers/base_observer.py +0 -0
  177. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/observers/loggers/__init__.py +0 -0
  178. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
  179. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
  180. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
  181. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
  182. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/observers/turn_tracking_observer.py +0 -0
  183. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/pipeline/__init__.py +0 -0
  184. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/pipeline/base_pipeline.py +0 -0
  185. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/pipeline/base_task.py +0 -0
  186. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/pipeline/llm_switcher.py +0 -0
  187. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
  188. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/pipeline/pipeline.py +0 -0
  189. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/pipeline/runner.py +0 -0
  190. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/pipeline/service_switcher.py +0 -0
  191. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
  192. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/pipeline/task.py +0 -0
  193. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/pipeline/task_observer.py +0 -0
  194. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
  195. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/pipeline/tts_switcher.py +0 -0
  196. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/__init__.py +0 -0
  197. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/aggregators/__init__.py +0 -0
  198. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/aggregators/dtmf_aggregator.py +0 -0
  199. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/aggregators/gated.py +0 -0
  200. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/aggregators/gated_llm_context.py +0 -0
  201. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/aggregators/gated_open_ai_llm_context.py +0 -0
  202. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/aggregators/llm_context.py +0 -0
  203. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/aggregators/llm_response.py +0 -0
  204. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
  205. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/aggregators/sentence.py +0 -0
  206. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/aggregators/user_response.py +0 -0
  207. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
  208. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/async_generator.py +0 -0
  209. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/audio/__init__.py +0 -0
  210. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
  211. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/consumer_processor.py +0 -0
  212. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/dtmf_aggregator.py +0 -0
  213. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/filters/__init__.py +0 -0
  214. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/filters/frame_filter.py +0 -0
  215. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/filters/function_filter.py +0 -0
  216. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/filters/identity_filter.py +0 -0
  217. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/filters/null_filter.py +0 -0
  218. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
  219. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
  220. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
  221. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/frame_processor.py +0 -0
  222. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/frameworks/__init__.py +0 -0
  223. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/frameworks/langchain.py +0 -0
  224. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/frameworks/rtvi.py +0 -0
  225. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/frameworks/strands_agents.py +0 -0
  226. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/gstreamer/__init__.py +0 -0
  227. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
  228. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/idle_frame_processor.py +0 -0
  229. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/logger.py +0 -0
  230. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/metrics/__init__.py +0 -0
  231. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/metrics/frame_processor_metrics.py +0 -0
  232. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/metrics/sentry.py +0 -0
  233. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/producer_processor.py +0 -0
  234. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/text_transformer.py +0 -0
  235. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/transcript_processor.py +0 -0
  236. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
  237. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/processors/user_idle_processor.py +0 -0
  238. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/py.typed +0 -0
  239. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/runner/__init__.py +0 -0
  240. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/runner/daily.py +0 -0
  241. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/runner/livekit.py +0 -0
  242. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/runner/run.py +0 -0
  243. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/runner/types.py +0 -0
  244. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/runner/utils.py +0 -0
  245. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/serializers/__init__.py +0 -0
  246. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/serializers/asterisk.py +0 -0
  247. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/serializers/asterisk_chan_websocket_original.py +0 -0
  248. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/serializers/base_serializer.py +0 -0
  249. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/serializers/convox.py +0 -0
  250. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/serializers/custom.py +0 -0
  251. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/serializers/exotel.py +0 -0
  252. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/serializers/livekit.py +0 -0
  253. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/serializers/plivo.py +0 -0
  254. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/serializers/protobuf.py +0 -0
  255. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/serializers/tatatele.py +0 -0
  256. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/serializers/telnyx.py +0 -0
  257. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/serializers/twilio.py +0 -0
  258. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/serializers/vi.py +0 -0
  259. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/__init__.py +0 -0
  260. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/ai_service.py +0 -0
  261. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/ai_services.py +0 -0
  262. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/anthropic/__init__.py +0 -0
  263. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/anthropic/llm.py +0 -0
  264. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/assemblyai/__init__.py +0 -0
  265. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/assemblyai/models.py +0 -0
  266. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/assemblyai/stt.py +0 -0
  267. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/asyncai/__init__.py +0 -0
  268. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/asyncai/tts.py +0 -0
  269. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/aws/__init__.py +0 -0
  270. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/aws/llm.py +0 -0
  271. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/aws/nova_sonic/__init__.py +0 -0
  272. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/aws/nova_sonic/context.py +0 -0
  273. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/aws/nova_sonic/frames.py +0 -0
  274. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/aws/nova_sonic/llm.py +0 -0
  275. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/aws/nova_sonic/ready.wav +0 -0
  276. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/aws/stt.py +0 -0
  277. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/aws/tts.py +0 -0
  278. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/aws/utils.py +0 -0
  279. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
  280. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
  281. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
  282. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
  283. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/azure/__init__.py +0 -0
  284. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/azure/common.py +0 -0
  285. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/azure/image.py +0 -0
  286. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/azure/llm.py +0 -0
  287. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/azure/realtime/__init__.py +0 -0
  288. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/azure/realtime/llm.py +0 -0
  289. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/azure/stt.py +0 -0
  290. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/azure/tts.py +0 -0
  291. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/cartesia/__init__.py +0 -0
  292. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/cartesia/stt.py +0 -0
  293. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/cartesia/tts.py +0 -0
  294. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/cerebras/__init__.py +0 -0
  295. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/cerebras/llm.py +0 -0
  296. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/deepgram/__init__.py +0 -0
  297. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/deepgram/flux/__init__.py +0 -0
  298. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/deepgram/flux/stt.py +0 -0
  299. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/deepgram/stt.py +0 -0
  300. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/deepgram/tts.py +0 -0
  301. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/deepseek/__init__.py +0 -0
  302. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/deepseek/llm.py +0 -0
  303. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/elevenlabs/__init__.py +0 -0
  304. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/elevenlabs/stt.py +0 -0
  305. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/elevenlabs/tts.py +0 -0
  306. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/fal/__init__.py +0 -0
  307. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/fal/image.py +0 -0
  308. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/fal/stt.py +0 -0
  309. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/fireworks/__init__.py +0 -0
  310. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/fireworks/llm.py +0 -0
  311. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/fish/__init__.py +0 -0
  312. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/fish/tts.py +0 -0
  313. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
  314. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
  315. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/gemini_multimodal_live/file_api.py +0 -0
  316. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
  317. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/gladia/__init__.py +0 -0
  318. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/gladia/config.py +0 -0
  319. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/gladia/stt.py +0 -0
  320. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/google/__init__.py +0 -0
  321. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/google/frames.py +0 -0
  322. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/google/gemini_live/__init__.py +0 -0
  323. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/google/gemini_live/file_api.py +0 -0
  324. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/google/gemini_live/llm.py +0 -0
  325. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/google/gemini_live/llm_vertex.py +0 -0
  326. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/google/google.py +0 -0
  327. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/google/image.py +0 -0
  328. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/google/llm.py +0 -0
  329. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/google/llm_openai.py +0 -0
  330. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/google/llm_vertex.py +0 -0
  331. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/google/rtvi.py +0 -0
  332. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/google/stt.py +0 -0
  333. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/google/tts.py +0 -0
  334. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/grok/__init__.py +0 -0
  335. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/grok/llm.py +0 -0
  336. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/groq/__init__.py +0 -0
  337. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/groq/llm.py +0 -0
  338. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/groq/stt.py +0 -0
  339. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/groq/tts.py +0 -0
  340. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/hamsa/__init__.py +0 -0
  341. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/hamsa/stt.py +0 -0
  342. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/heygen/__init__.py +0 -0
  343. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/heygen/api.py +0 -0
  344. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/heygen/client.py +0 -0
  345. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/heygen/video.py +0 -0
  346. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/hume/__init__.py +0 -0
  347. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/hume/tts.py +0 -0
  348. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/image_service.py +0 -0
  349. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/inworld/__init__.py +0 -0
  350. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/inworld/tts.py +0 -0
  351. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/llm_service.py +0 -0
  352. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/lmnt/__init__.py +0 -0
  353. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/lmnt/tts.py +0 -0
  354. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/mcp_service.py +0 -0
  355. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/mem0/__init__.py +0 -0
  356. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/mem0/memory.py +0 -0
  357. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/minimax/__init__.py +0 -0
  358. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/minimax/tts.py +0 -0
  359. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/mistral/__init__.py +0 -0
  360. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/mistral/llm.py +0 -0
  361. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/moondream/__init__.py +0 -0
  362. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/moondream/vision.py +0 -0
  363. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/neuphonic/__init__.py +0 -0
  364. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/neuphonic/tts.py +0 -0
  365. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/nim/__init__.py +0 -0
  366. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/nim/llm.py +0 -0
  367. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/ollama/__init__.py +0 -0
  368. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/ollama/llm.py +0 -0
  369. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai/base_llm.py +0 -0
  370. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai/image.py +0 -0
  371. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai/llm.py +0 -0
  372. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai/realtime/__init__.py +0 -0
  373. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai/realtime/context.py +0 -0
  374. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai/realtime/events.py +0 -0
  375. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai/realtime/frames.py +0 -0
  376. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai/realtime/llm.py +0 -0
  377. {dv_pipecat_ai-0.0.93.dev2/src/pipecat/services/speechmatics → dv_pipecat_ai-0.0.93.dev3/src/pipecat/services/openai/responses}/__init__.py +0 -0
  378. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai/stt.py +0 -0
  379. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai/tts.py +0 -0
  380. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai_realtime/__init__.py +0 -0
  381. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai_realtime/azure.py +0 -0
  382. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai_realtime/context.py +0 -0
  383. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai_realtime/events.py +0 -0
  384. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai_realtime/frames.py +0 -0
  385. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
  386. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
  387. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
  388. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
  389. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
  390. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
  391. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openpipe/__init__.py +0 -0
  392. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openpipe/llm.py +0 -0
  393. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openrouter/__init__.py +0 -0
  394. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/openrouter/llm.py +0 -0
  395. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/perplexity/__init__.py +0 -0
  396. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/perplexity/llm.py +0 -0
  397. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/piper/__init__.py +0 -0
  398. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/piper/tts.py +0 -0
  399. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/playht/__init__.py +0 -0
  400. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/playht/tts.py +0 -0
  401. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/qwen/__init__.py +0 -0
  402. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/qwen/llm.py +0 -0
  403. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/rime/__init__.py +0 -0
  404. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/rime/tts.py +0 -0
  405. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/ringg/__init__.py +0 -0
  406. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/ringg/stt.py +0 -0
  407. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/riva/__init__.py +0 -0
  408. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/riva/stt.py +0 -0
  409. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/riva/tts.py +0 -0
  410. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/salesforce/__init__.py +0 -0
  411. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/salesforce/llm.py +0 -0
  412. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/sambanova/__init__.py +0 -0
  413. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/sambanova/llm.py +0 -0
  414. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/sambanova/stt.py +0 -0
  415. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/sarvam/__init__.py +0 -0
  416. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/sarvam/_sdk.py +0 -0
  417. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/sarvam/stt.py +0 -0
  418. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/sarvam/tts.py +0 -0
  419. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/simli/__init__.py +0 -0
  420. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/simli/video.py +0 -0
  421. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/soniox/__init__.py +0 -0
  422. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/soniox/stt.py +0 -0
  423. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/speechmatics/stt.py +0 -0
  424. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/stt_latency.py +0 -0
  425. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/stt_service.py +0 -0
  426. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/tavus/__init__.py +0 -0
  427. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/tavus/video.py +0 -0
  428. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/together/__init__.py +0 -0
  429. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/together/llm.py +0 -0
  430. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/tts_service.py +0 -0
  431. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/ultravox/__init__.py +0 -0
  432. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/ultravox/stt.py +0 -0
  433. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/vision_service.py +0 -0
  434. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/vistaar/__init__.py +0 -0
  435. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/vistaar/llm.py +0 -0
  436. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/websocket_service.py +0 -0
  437. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/whisper/__init__.py +0 -0
  438. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/whisper/base_stt.py +0 -0
  439. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/whisper/stt.py +0 -0
  440. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/xtts/__init__.py +0 -0
  441. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/services/xtts/tts.py +0 -0
  442. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/sync/__init__.py +0 -0
  443. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/sync/base_notifier.py +0 -0
  444. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/sync/event_notifier.py +0 -0
  445. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/tests/__init__.py +0 -0
  446. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/tests/utils.py +0 -0
  447. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transcriptions/__init__.py +0 -0
  448. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transcriptions/language.py +0 -0
  449. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/__init__.py +0 -0
  450. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/base_input.py +0 -0
  451. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/base_output.py +0 -0
  452. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/base_transport.py +0 -0
  453. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/daily/__init__.py +0 -0
  454. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/daily/transport.py +0 -0
  455. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/daily/utils.py +0 -0
  456. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/heygen/__init__.py +0 -0
  457. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/heygen/transport.py +0 -0
  458. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/livekit/__init__.py +0 -0
  459. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/livekit/transport.py +0 -0
  460. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/local/__init__.py +0 -0
  461. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/local/audio.py +0 -0
  462. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/local/tk.py +0 -0
  463. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/network/__init__.py +0 -0
  464. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/network/fastapi_websocket.py +0 -0
  465. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/network/small_webrtc.py +0 -0
  466. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/network/webrtc_connection.py +0 -0
  467. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/network/websocket_client.py +0 -0
  468. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/network/websocket_server.py +0 -0
  469. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/services/__init__.py +0 -0
  470. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/services/daily.py +0 -0
  471. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/services/helpers/__init__.py +0 -0
  472. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
  473. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/services/livekit.py +0 -0
  474. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/services/tavus.py +0 -0
  475. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/smallwebrtc/__init__.py +0 -0
  476. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/smallwebrtc/connection.py +0 -0
  477. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/smallwebrtc/request_handler.py +0 -0
  478. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/smallwebrtc/transport.py +0 -0
  479. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/tavus/__init__.py +0 -0
  480. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/tavus/transport.py +0 -0
  481. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/websocket/__init__.py +0 -0
  482. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/websocket/client.py +0 -0
  483. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/websocket/fastapi.py +0 -0
  484. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/websocket/server.py +0 -0
  485. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/whatsapp/__init__.py +0 -0
  486. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/whatsapp/api.py +0 -0
  487. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/transports/whatsapp/client.py +0 -0
  488. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/__init__.py +0 -0
  489. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/asyncio/__init__.py +0 -0
  490. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/asyncio/task_manager.py +0 -0
  491. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/base_object.py +0 -0
  492. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/logger_config.py +0 -0
  493. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/network.py +0 -0
  494. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/redis.py +0 -0
  495. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/string.py +0 -0
  496. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/text/__init__.py +0 -0
  497. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
  498. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/text/base_text_filter.py +0 -0
  499. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
  500. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
  501. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
  502. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
  503. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/time.py +0 -0
  504. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/tracing/__init__.py +0 -0
  505. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/tracing/class_decorators.py +0 -0
  506. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
  507. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/tracing/service_attributes.py +0 -0
  508. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/tracing/setup.py +0 -0
  509. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
  510. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
  511. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/src/pipecat/utils/utils.py +0 -0
  512. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/stop_container.yml +0 -0
  513. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/test_elevenlabs_stt_segmented.py +0 -0
  514. {dv_pipecat_ai-0.0.93.dev2 → dv_pipecat_ai-0.0.93.dev3}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.93.dev2
3
+ Version: 0.0.93.dev3
4
4
  Summary: An open source framework for voice (and multimodal) assistants
5
5
  License-Expression: BSD-2-Clause
6
6
  Project-URL: Source, https://github.com/pipecat-ai/pipecat
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.93.dev2
3
+ Version: 0.0.93.dev3
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
@@ -98,6 +98,7 @@ src/pipecat/adapters/services/bedrock_adapter.py
98
98
  src/pipecat/adapters/services/gemini_adapter.py
99
99
  src/pipecat/adapters/services/open_ai_adapter.py
100
100
  src/pipecat/adapters/services/open_ai_realtime_adapter.py
101
+ src/pipecat/adapters/services/open_ai_responses_adapter.py
101
102
  src/pipecat/audio/__init__.py
102
103
  src/pipecat/audio/utils.py
103
104
  src/pipecat/audio/dtmf/__init__.py
@@ -378,6 +379,8 @@ src/pipecat/services/openai/realtime/context.py
378
379
  src/pipecat/services/openai/realtime/events.py
379
380
  src/pipecat/services/openai/realtime/frames.py
380
381
  src/pipecat/services/openai/realtime/llm.py
382
+ src/pipecat/services/openai/responses/__init__.py
383
+ src/pipecat/services/openai/responses/llm.py
381
384
  src/pipecat/services/openai_realtime/__init__.py
382
385
  src/pipecat/services/openai_realtime/azure.py
383
386
  src/pipecat/services/openai_realtime/context.py
@@ -0,0 +1,242 @@
1
+ #
2
+ # Copyright (c) 2024–2025, Daily
3
+ #
4
+ # SPDX-License-Identifier: BSD 2-Clause License
5
+ #
6
+
7
+ """OpenAI Responses API adapter for Pipecat."""
8
+
9
+ import copy
10
+ from typing import Any, Dict, List, Optional, TypedDict
11
+
12
+ from loguru import logger
13
+ from openai._types import NotGiven as OpenAINotGiven
14
+ from openai.types.responses import FunctionToolParam, ResponseInputItemParam
15
+
16
+ from pipecat.adapters.base_llm_adapter import BaseLLMAdapter
17
+ from pipecat.adapters.schemas.tools_schema import ToolsSchema
18
+ from pipecat.processors.aggregators.llm_context import (
19
+ LLMContext,
20
+ LLMContextMessage,
21
+ LLMSpecificMessage,
22
+ NotGiven,
23
+ )
24
+
25
+
26
+ class OpenAIResponsesLLMInvocationParams(TypedDict, total=False):
27
+ """Context-based parameters for invoking OpenAI Responses API."""
28
+
29
+ input: List[ResponseInputItemParam]
30
+ tools: List[FunctionToolParam] | OpenAINotGiven
31
+ tool_choice: str | dict | OpenAINotGiven
32
+ instructions: str
33
+
34
+
35
+ class OpenAIResponsesLLMAdapter(BaseLLMAdapter[OpenAIResponsesLLMInvocationParams]):
36
+ """OpenAI Responses API adapter for Pipecat.
37
+
38
+ Handles:
39
+
40
+ - Converting LLMContext messages to Responses API input items
41
+ - Converting Pipecat's standardized tools schema to Responses API function tool format
42
+ - Extracting and sanitizing messages from the LLM context for logging
43
+ """
44
+
45
+ def __init__(self):
46
+ """Initialize the adapter."""
47
+ super().__init__()
48
+ self._warned_system_instruction = False
49
+
50
+ @property
51
+ def id_for_llm_specific_messages(self) -> str:
52
+ """Get the identifier used in LLMSpecificMessage instances."""
53
+ return "openai_responses"
54
+
55
+ def get_llm_invocation_params(
56
+ self,
57
+ context: LLMContext,
58
+ *,
59
+ system_instruction: Optional[str] = None,
60
+ ) -> OpenAIResponsesLLMInvocationParams:
61
+ """Get Responses API invocation parameters from a universal LLM context.
62
+
63
+ Args:
64
+ context: The LLM context containing messages, tools, etc.
65
+ system_instruction: Optional system instruction from service settings.
66
+
67
+ Returns:
68
+ Dictionary of parameters for the Responses API.
69
+ """
70
+ messages = self.get_messages(context)
71
+ input_items = self._convert_messages_to_input(messages)
72
+
73
+ params: OpenAIResponsesLLMInvocationParams = {
74
+ "input": input_items,
75
+ "tools": self.from_standard_tools(context.tools),
76
+ "tool_choice": context.tool_choice,
77
+ }
78
+
79
+ if system_instruction:
80
+ # Compatibility: The Responses API requires at least one input
81
+ # message when instructions are provided. Contexts that worked with
82
+ # OpenAILLMService (system_instruction + empty messages) need the
83
+ # instructions converted to an initial developer message.
84
+ if not input_items:
85
+ params["input"] = [{"role": "developer", "content": system_instruction}]
86
+ else:
87
+ params["instructions"] = system_instruction
88
+
89
+ return params
90
+
91
+ def to_provider_tools_format(self, tools_schema: ToolsSchema) -> List[FunctionToolParam]:
92
+ """Convert function schemas to Responses API function tool format.
93
+
94
+ Args:
95
+ tools_schema: The Pipecat tools schema to convert.
96
+
97
+ Returns:
98
+ List of Responses API function tool definitions.
99
+ """
100
+ functions_schema = tools_schema.standard_tools
101
+ result = []
102
+ for func in functions_schema:
103
+ d = func.to_default_dict()
104
+ tool: FunctionToolParam = {
105
+ "type": "function",
106
+ "name": d["name"],
107
+ "parameters": d.get("parameters", {}),
108
+ "strict": d.get("strict", None),
109
+ }
110
+ if "description" in d:
111
+ tool["description"] = d["description"]
112
+ result.append(tool)
113
+ return result
114
+
115
+ def get_messages_for_logging(self, context: LLMContext) -> List[Dict[str, Any]]:
116
+ """Get messages from context in a format ready for logging.
117
+
118
+ Removes or truncates sensitive data like image content for safe logging.
119
+
120
+ Args:
121
+ context: The LLM context containing messages.
122
+
123
+ Returns:
124
+ List of messages in a format ready for logging.
125
+ """
126
+ msgs = []
127
+ for message in self.get_messages(context):
128
+ msg = copy.deepcopy(message)
129
+ if "content" in msg:
130
+ if isinstance(msg["content"], list):
131
+ for item in msg["content"]:
132
+ if item.get("type") == "image_url":
133
+ if item["image_url"]["url"].startswith("data:image/"):
134
+ item["image_url"]["url"] = "data:image/..."
135
+ if item.get("type") == "input_audio":
136
+ item["input_audio"]["data"] = "..."
137
+ msgs.append(msg)
138
+ return msgs
139
+
140
+ def _convert_messages_to_input(
141
+ self, messages: List[LLMContextMessage]
142
+ ) -> List[ResponseInputItemParam]:
143
+ """Convert LLMContext messages to Responses API input items.
144
+
145
+ Args:
146
+ messages: Messages from the LLMContext.
147
+
148
+ Returns:
149
+ List of Responses API input items.
150
+ """
151
+ result: List[ResponseInputItemParam] = []
152
+ is_first = True
153
+
154
+ for message in messages:
155
+ if isinstance(message, LLMSpecificMessage):
156
+ result.append(message.message)
157
+ is_first = False
158
+ continue
159
+
160
+ role = message.get("role")
161
+
162
+ if role == "system":
163
+ if is_first and not self._warned_system_instruction:
164
+ logger.warning(
165
+ "System messages in LLMContext are converted to 'developer' role for the "
166
+ "Responses API. Consider using system_instruction instead, which "
167
+ "maps to the 'instructions' parameter."
168
+ )
169
+ self._warned_system_instruction = True
170
+ content = message.get("content", "")
171
+ if isinstance(content, list):
172
+ content = self._convert_multimodal_content(content)
173
+ result.append({"role": "developer", "content": content})
174
+
175
+ elif role == "user":
176
+ content = message.get("content", "")
177
+ if isinstance(content, list):
178
+ content = self._convert_multimodal_content(content)
179
+ result.append({"role": "user", "content": content})
180
+
181
+ elif role == "assistant":
182
+ tool_calls = message.get("tool_calls")
183
+ if tool_calls:
184
+ for tc in tool_calls:
185
+ func = tc.get("function", {})
186
+ result.append(
187
+ {
188
+ "type": "function_call",
189
+ "call_id": tc.get("id", ""),
190
+ "name": func.get("name", ""),
191
+ "arguments": func.get("arguments", ""),
192
+ }
193
+ )
194
+ else:
195
+ content = message.get("content", "")
196
+ if isinstance(content, list):
197
+ content = self._convert_multimodal_content(content)
198
+ result.append({"role": "assistant", "content": content})
199
+
200
+ elif role == "tool":
201
+ content = message.get("content", "")
202
+ if not isinstance(content, str):
203
+ content = str(content)
204
+ result.append(
205
+ {
206
+ "type": "function_call_output",
207
+ "call_id": message.get("tool_call_id", ""),
208
+ "output": content,
209
+ }
210
+ )
211
+
212
+ is_first = False
213
+
214
+ return result
215
+
216
+ def _convert_multimodal_content(self, content: list) -> list:
217
+ """Convert multimodal content parts to Responses API format.
218
+
219
+ Args:
220
+ content: List of content parts from the LLMContext message.
221
+
222
+ Returns:
223
+ List of content parts in Responses API format.
224
+ """
225
+ result = []
226
+ for part in content:
227
+ part_type = part.get("type")
228
+ if part_type == "text":
229
+ result.append({"type": "input_text", "text": part.get("text", "")})
230
+ elif part_type == "image_url":
231
+ image_url_obj = part.get("image_url", {})
232
+ result.append(
233
+ {
234
+ "type": "input_image",
235
+ "image_url": image_url_obj.get("url", ""),
236
+ "detail": image_url_obj.get("detail", "auto"),
237
+ }
238
+ )
239
+ else:
240
+ # Pass through other types as-is (e.g. input_audio when supported)
241
+ result.append(part)
242
+ return result
@@ -13,6 +13,7 @@ LLM processing, and text-to-speech components in conversational AI pipelines.
13
13
 
14
14
  import asyncio
15
15
  import json
16
+ import time
16
17
  from abc import abstractmethod
17
18
  from typing import Any, Dict, List, Literal, Optional, Set
18
19
 
@@ -39,6 +40,7 @@ from pipecat.frames.frames import (
39
40
  InterruptionFrame,
40
41
  LLMContextAssistantTimestampFrame,
41
42
  LLMContextFrame,
43
+ LLMProcessingInitiatedFrame,
42
44
  LLMFullResponseEndFrame,
43
45
  LLMFullResponseStartFrame,
44
46
  LLMMessagesAppendFrame,
@@ -50,6 +52,7 @@ from pipecat.frames.frames import (
50
52
  StartFrame,
51
53
  TextFrame,
52
54
  TranscriptionFrame,
55
+ TranscriptDropFrame,
53
56
  TTSTextFrame,
54
57
  UserImageRawFrame,
55
58
  UserStartedSpeakingFrame,
@@ -132,6 +135,7 @@ class LLMContextAggregator(FrameProcessor):
132
135
  Args:
133
136
  direction: The direction to push the frame (upstream or downstream).
134
137
  """
138
+ await self.push_frame(LLMProcessingInitiatedFrame(), direction)
135
139
  frame = self._get_context_frame()
136
140
  await self.push_frame(frame, direction)
137
141
 
@@ -234,12 +238,21 @@ class LLMUserAggregator(LLMContextAggregator):
234
238
  self._aggregation_event = asyncio.Event()
235
239
  self._aggregation_task = None
236
240
 
241
+ # Smart aggregation push state — enables immediate push of late
242
+ # transcriptions and prevents duplicate STT outputs from triggering
243
+ # duplicate LLM calls.
244
+ self._latest_final_transcript = ""
245
+ self._last_user_speaking_time: float = 0
246
+ self._last_aggregation_push_time: float = 0
247
+ self._pending_transcription_ids: List[int] = []
248
+
237
249
  async def reset(self):
238
250
  """Reset the aggregation state and interruption strategies."""
239
251
  await super().reset()
240
252
  self._was_bot_speaking = False
241
253
  self._seen_interim_results = False
242
254
  self._waiting_for_aggregation = False
255
+ self._pending_transcription_ids.clear()
243
256
  [await s.reset() for s in self._interruption_strategies]
244
257
 
245
258
  async def process_frame(self, frame: Frame, direction: FrameDirection):
@@ -304,12 +317,22 @@ class LLMUserAggregator(LLMContextAggregator):
304
317
  """Process the current aggregation and push it downstream."""
305
318
  aggregation = self._aggregation
306
319
  await self.reset()
320
+ # Notify BotSpeakingFrameMonitor to tighten VAD before LLM starts
321
+ await self.push_frame(LLMProcessingInitiatedFrame())
307
322
  self._context.add_message({"role": self.role, "content": aggregation})
308
323
  frame = LLMContextFrame(self._context)
309
324
  await self.push_frame(frame)
325
+ self._last_aggregation_push_time = time.time()
310
326
 
311
- async def push_aggregation(self):
312
- """Push the current aggregation based on interruption strategies and conditions."""
327
+ async def push_aggregation(self, trigger_interruption: bool = False):
328
+ """Push the current aggregation based on interruption strategies and conditions.
329
+
330
+ Args:
331
+ trigger_interruption: If True and no interruption strategies are
332
+ configured, push an InterruptionFrame to stop bot speech before
333
+ submitting the user message. Used by smart push logic for late
334
+ transcriptions that should interrupt the bot.
335
+ """
313
336
  if len(self._aggregation) > 0:
314
337
  if self.interruption_strategies and self._bot_speaking:
315
338
  should_interrupt = await self._should_interrupt_based_on_strategies()
@@ -322,9 +345,12 @@ class LLMUserAggregator(LLMContextAggregator):
322
345
  await self._process_aggregation()
323
346
  else:
324
347
  logger.debug("Interruption conditions not met - not pushing aggregation")
325
- # Don't process aggregation, just reset it
348
+ # Don't process aggregation, discard pending transcriptions and reset
349
+ await self._discard_pending_transcriptions("interruption_conditions_not_met")
326
350
  await self.reset()
327
351
  else:
352
+ if trigger_interruption:
353
+ await self.push_frame(InterruptionFrame(), FrameDirection.DOWNSTREAM)
328
354
  # No interruption config - normal behavior (always push aggregation)
329
355
  await self._process_aggregation()
330
356
  # Handles the case where both the user and the bot are not speaking,
@@ -355,6 +381,21 @@ class LLMUserAggregator(LLMContextAggregator):
355
381
 
356
382
  return any([await should_interrupt(s) for s in self._interruption_strategies])
357
383
 
384
+ async def _discard_pending_transcriptions(self, reason: str):
385
+ """Notify upstream processors that pending transcripts should be dropped.
386
+
387
+ When interruption strategies reject user speech, the words were already
388
+ emitted to the transcript. This sends TranscriptDropFrame upstream so
389
+ TranscriptProcessor removes those words from the conversation transcript.
390
+
391
+ Args:
392
+ reason: Descriptive reason for the drop (for logging).
393
+ """
394
+ if self._pending_transcription_ids:
395
+ drop_frame = TranscriptDropFrame(transcript_ids=list(self._pending_transcription_ids))
396
+ await self.push_frame(drop_frame, FrameDirection.UPSTREAM)
397
+ self._pending_transcription_ids.clear()
398
+
358
399
  async def _start(self, frame: StartFrame):
359
400
  self._create_aggregation_task()
360
401
 
@@ -382,6 +423,13 @@ class LLMUserAggregator(LLMContextAggregator):
382
423
  await s.append_audio(frame.audio, frame.sample_rate)
383
424
 
384
425
  async def _handle_user_started_speaking(self, frame: UserStartedSpeakingFrame):
426
+ # Clear stale aggregation from previous utterance to prevent it from
427
+ # leaking into the new one. Also drop pending transcript IDs upstream.
428
+ if len(self._aggregation) > 0:
429
+ self._aggregation = ""
430
+ await self._discard_pending_transcriptions("user_started_speaking")
431
+ self._latest_final_transcript = ""
432
+ self._last_user_speaking_time = time.time()
385
433
  self._user_speaking = True
386
434
  self._waiting_for_aggregation = True
387
435
  self._was_bot_speaking = self._bot_speaking
@@ -393,6 +441,7 @@ class LLMUserAggregator(LLMContextAggregator):
393
441
  self._emulating_vad = False
394
442
 
395
443
  async def _handle_user_stopped_speaking(self, _: UserStoppedSpeakingFrame):
444
+ self._last_user_speaking_time = time.time()
396
445
  self._user_speaking = False
397
446
  # We just stopped speaking. Let's see if there's some aggregation to
398
447
  # push. If the last thing we saw is an interim transcription, let's wait
@@ -421,17 +470,64 @@ class LLMUserAggregator(LLMContextAggregator):
421
470
  return
422
471
 
423
472
  self._aggregation += f" {text}" if self._aggregation else text
473
+ self._pending_transcription_ids.append(frame.id)
424
474
  # We just got a final result, so let's reset interim results.
425
475
  self._seen_interim_results = False
426
- # Reset aggregation timer.
427
- self._aggregation_event.set()
476
+
477
+ # Smart aggregation push: when the user is NOT speaking (VAD stopped),
478
+ # check if this late transcription should be pushed immediately rather
479
+ # than waiting for the background task timeout (saves 200-500ms TTFB).
480
+ if not self._user_speaking:
481
+ time_since_stopped = time.time() - self._last_user_speaking_time
482
+ should_push = False
483
+ should_interrupt = False
484
+
485
+ # Condition 1: User stopped < 1s ago + new (non-duplicate) text.
486
+ # Covers normal late transcription delivery from STT.
487
+ if time_since_stopped < 1.0 and self._latest_final_transcript != text:
488
+ # If we also pushed aggregation < 1s ago, this is a rapid
489
+ # correction/addition — interrupt the bot's stale response.
490
+ if time.time() - self._last_aggregation_push_time < 1.0:
491
+ should_interrupt = True
492
+ should_push = True
493
+ # Condition 2: User stopped 1-3s ago + bot silent + new text.
494
+ # Covers very slow STT delivery when nobody is talking.
495
+ elif (
496
+ not self._bot_speaking
497
+ and time_since_stopped < 3.0
498
+ and self._latest_final_transcript != text
499
+ ):
500
+ if time.time() - self._last_aggregation_push_time < 3.0:
501
+ should_interrupt = True
502
+ should_push = True
503
+ # Condition 3: Frame metadata override from STT or upstream processor.
504
+ elif frame.metadata.get("push_aggregation", False):
505
+ should_push = True
506
+
507
+ if should_push:
508
+ if should_interrupt:
509
+ # Single-word filter: don't interrupt bot for backchannel
510
+ # utterances like "ok", "hmm", "yes".
511
+ if len(self._aggregation.split()) > 1:
512
+ await self.push_aggregation(should_interrupt)
513
+ else:
514
+ await self.push_aggregation()
515
+ else:
516
+ # No immediate push — fall back to background task timeout.
517
+ self._aggregation_event.set()
518
+ else:
519
+ # User is still speaking — just reset the aggregation timer.
520
+ self._aggregation_event.set()
521
+
522
+ self._latest_final_transcript = text
428
523
 
429
524
  async def _handle_interim_transcription(self, _: InterimTranscriptionFrame):
430
525
  self._seen_interim_results = True
431
526
 
432
527
  def _create_aggregation_task(self):
433
- if not self._aggregation_task:
434
- self._aggregation_task = self.create_task(self._aggregation_task_handler())
528
+ pass
529
+ # if not self._aggregation_task:
530
+ # self._aggregation_task = self.create_task(self._aggregation_task_handler())
435
531
 
436
532
  async def _cancel_aggregation_task(self):
437
533
  if self._aggregation_task:
@@ -510,6 +606,7 @@ class LLMUserAggregator(LLMContextAggregator):
510
606
  if self._bot_speaking and not self._params.enable_emulated_vad_interruptions:
511
607
  # If emulated VAD interruptions are disabled and bot is speaking, ignore
512
608
  logger.debug("Ignoring user speaking emulation, bot is speaking.")
609
+ await self._discard_pending_transcriptions("emulated_vad_ignored")
513
610
  await self.reset()
514
611
  else:
515
612
  # Either bot is not speaking, or emulated VAD interruptions are enabled
@@ -11,6 +11,7 @@ from pipecat.services import DeprecatedModuleProxy
11
11
  from .image import *
12
12
  from .llm import *
13
13
  from .realtime import *
14
+ from .responses.llm import *
14
15
  from .stt import *
15
16
  from .tts import *
16
17