dv-pipecat-ai 0.0.85.dev698__tar.gz → 0.0.85.dev699__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of dv-pipecat-ai might be problematic. Click here for more details.

Files changed (501) hide show
  1. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/PKG-INFO +1 -1
  2. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/dv_pipecat_ai.egg-info/PKG-INFO +1 -1
  3. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/dv_pipecat_ai.egg-info/SOURCES.txt +2 -0
  4. dv_pipecat_ai-0.0.85.dev699/src/pipecat/services/salesforce/__init__.py +9 -0
  5. dv_pipecat_ai-0.0.85.dev699/src/pipecat/services/salesforce/llm.py +465 -0
  6. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.dockerignore +0 -0
  7. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
  8. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
  9. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
  10. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
  11. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
  12. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
  13. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
  14. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  15. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  16. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/workflows/build.yaml +0 -0
  17. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/workflows/coverage.yaml +0 -0
  18. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/workflows/force_push_to_pypi.yml +0 -0
  19. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/workflows/format.yaml +0 -0
  20. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/workflows/github.yml +0 -0
  21. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/workflows/promote-prod.yml +0 -0
  22. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/workflows/publish.yaml +0 -0
  23. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/workflows/publish_test.yaml +0 -0
  24. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/workflows/python-compatibility.yaml +0 -0
  25. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/workflows/set-traffic-split.yml +0 -0
  26. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/workflows/sync-quickstart.yaml +0 -0
  27. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.github/workflows/tests.yaml +0 -0
  28. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.gitignore +0 -0
  29. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.pre-commit-config.yaml +0 -0
  30. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/.readthedocs.yaml +0 -0
  31. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/CHANGELOG.md +0 -0
  32. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/CHANGELOG.md.template +0 -0
  33. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/CLAUDE.md +0 -0
  34. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/COMMUNITY_INTEGRATIONS.md +0 -0
  35. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/CONTRIBUTING.md +0 -0
  36. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/DOCKER_BUILD_OPTIMIZATION_SUMMARY.md +0 -0
  37. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/LICENSE +0 -0
  38. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/MANIFEST.in +0 -0
  39. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/README.md +0 -0
  40. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/SECURITY.md +0 -0
  41. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/ansible.cfg +0 -0
  42. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/ansible_deployment.sh +0 -0
  43. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/cleanup_old_containers.yml +0 -0
  44. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/codecov.yml +0 -0
  45. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/create-new-machine/ansible.cfg +0 -0
  46. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/create-new-machine/ansible_setup.sh +0 -0
  47. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/create-new-machine/inventory.ini +0 -0
  48. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/create-new-machine/replace_env.yml +0 -0
  49. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/create-new-machine/setup_playbook.yml +0 -0
  50. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/create_inventory.py +0 -0
  51. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/delete_old_dockers.sh +0 -0
  52. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/deploy.sh +0 -0
  53. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/deploy_playbook.yml +0 -0
  54. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/docker-compose.dev.yml +0 -0
  55. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/dump_logs.yml +0 -0
  56. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/env.example +0 -0
  57. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/fetch_logs.yml +0 -0
  58. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/inventory.ini +0 -0
  59. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/.helmignore +0 -0
  60. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/Chart.yaml +0 -0
  61. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
  62. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
  63. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/templates/cluster-role.yaml +0 -0
  64. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
  65. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
  66. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
  67. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/templates/keda-api-key-secret.yaml +0 -0
  68. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/templates/keda-scaledobject.yaml +0 -0
  69. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/templates/keda-trigger-auth.yaml +0 -0
  70. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/templates/pdb.yaml +0 -0
  71. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/templates/service.yaml +0 -0
  72. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/values-canary.yaml +0 -0
  73. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/values-prod.yaml +0 -0
  74. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/values-stage.yaml +0 -0
  75. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/dv-pipecat/values.yaml +0 -0
  76. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/k8s/istio/destination-virtualservice.yaml +0 -0
  77. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/merge-code-into-single-file.sh +0 -0
  78. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/pipecat.png +0 -0
  79. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/pyproject.toml +0 -0
  80. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/restart.sh +0 -0
  81. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/restart_playbook.yml +0 -0
  82. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/setup.cfg +0 -0
  83. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
  84. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/dv_pipecat_ai.egg-info/requires.txt +0 -0
  85. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
  86. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/__init__.py +0 -0
  87. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/adapters/__init__.py +0 -0
  88. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/adapters/base_llm_adapter.py +0 -0
  89. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/adapters/schemas/__init__.py +0 -0
  90. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/adapters/schemas/direct_function.py +0 -0
  91. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/adapters/schemas/function_schema.py +0 -0
  92. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
  93. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/adapters/services/__init__.py +0 -0
  94. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
  95. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
  96. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
  97. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
  98. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
  99. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
  100. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/__init__.py +0 -0
  101. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/dtmf/__init__.py +0 -0
  102. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/dtmf/dtmf-0.wav +0 -0
  103. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/dtmf/dtmf-1.wav +0 -0
  104. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/dtmf/dtmf-2.wav +0 -0
  105. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/dtmf/dtmf-3.wav +0 -0
  106. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/dtmf/dtmf-4.wav +0 -0
  107. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/dtmf/dtmf-5.wav +0 -0
  108. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/dtmf/dtmf-6.wav +0 -0
  109. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/dtmf/dtmf-7.wav +0 -0
  110. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/dtmf/dtmf-8.wav +0 -0
  111. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/dtmf/dtmf-9.wav +0 -0
  112. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/dtmf/dtmf-pound.wav +0 -0
  113. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/dtmf/dtmf-star.wav +0 -0
  114. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/dtmf/types.py +0 -0
  115. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/dtmf/utils.py +0 -0
  116. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/filters/__init__.py +0 -0
  117. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/filters/aic_filter.py +0 -0
  118. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
  119. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/filters/koala_filter.py +0 -0
  120. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/filters/krisp_filter.py +0 -0
  121. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/filters/krisp_viva_filter.py +0 -0
  122. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
  123. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/filters/pyrnn_local_filter.py +0 -0
  124. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/interruptions/__init__.py +0 -0
  125. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
  126. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
  127. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/mixers/__init__.py +0 -0
  128. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
  129. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
  130. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/resamplers/__init__.py +0 -0
  131. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
  132. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
  133. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
  134. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/resamplers/soxr_stream_resampler.py +0 -0
  135. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/turn/__init__.py +0 -0
  136. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
  137. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
  138. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
  139. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/turn/smart_turn/data/__init__.py +0 -0
  140. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/turn/smart_turn/data/smart-turn-v3.0.onnx +0 -0
  141. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
  142. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
  143. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
  144. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
  145. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v2.py +0 -0
  146. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v3.py +0 -0
  147. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/utils.py +0 -0
  148. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/vad/__init__.py +0 -0
  149. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/vad/data/README.md +0 -0
  150. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/vad/data/__init__.py +0 -0
  151. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
  152. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/vad/data/silero_vad_v2.onnx +0 -0
  153. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/vad/silero.py +0 -0
  154. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
  155. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/clocks/__init__.py +0 -0
  156. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/clocks/base_clock.py +0 -0
  157. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/clocks/system_clock.py +0 -0
  158. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/extensions/__init__.py +0 -0
  159. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/extensions/ivr/__init__.py +0 -0
  160. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/extensions/ivr/ivr_navigator.py +0 -0
  161. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/extensions/voicemail/__init__.py +0 -0
  162. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/extensions/voicemail/voicemail_detector.py +0 -0
  163. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/frames/__init__.py +0 -0
  164. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/frames/frames.proto +0 -0
  165. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/frames/frames.py +0 -0
  166. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
  167. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/metrics/__init__.py +0 -0
  168. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/metrics/metrics.py +0 -0
  169. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/observers/__init__.py +0 -0
  170. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/observers/base_observer.py +0 -0
  171. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/observers/loggers/__init__.py +0 -0
  172. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
  173. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
  174. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
  175. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
  176. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/observers/turn_tracking_observer.py +0 -0
  177. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/pipeline/__init__.py +0 -0
  178. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/pipeline/base_pipeline.py +0 -0
  179. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/pipeline/base_task.py +0 -0
  180. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/pipeline/llm_switcher.py +0 -0
  181. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
  182. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/pipeline/pipeline.py +0 -0
  183. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/pipeline/runner.py +0 -0
  184. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/pipeline/service_switcher.py +0 -0
  185. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
  186. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/pipeline/task.py +0 -0
  187. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/pipeline/task_observer.py +0 -0
  188. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
  189. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/pipeline/tts_switcher.py +0 -0
  190. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/__init__.py +0 -0
  191. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/aggregators/__init__.py +0 -0
  192. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/aggregators/dtmf_aggregator.py +0 -0
  193. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/aggregators/gated.py +0 -0
  194. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/aggregators/gated_llm_context.py +0 -0
  195. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/aggregators/gated_open_ai_llm_context.py +0 -0
  196. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/aggregators/llm_context.py +0 -0
  197. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/aggregators/llm_response.py +0 -0
  198. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/aggregators/llm_response_universal.py +0 -0
  199. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
  200. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/aggregators/sentence.py +0 -0
  201. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/aggregators/user_response.py +0 -0
  202. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
  203. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/async_generator.py +0 -0
  204. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/audio/__init__.py +0 -0
  205. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
  206. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/consumer_processor.py +0 -0
  207. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/dtmf_aggregator.py +0 -0
  208. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/filters/__init__.py +0 -0
  209. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/filters/frame_filter.py +0 -0
  210. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/filters/function_filter.py +0 -0
  211. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/filters/identity_filter.py +0 -0
  212. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/filters/null_filter.py +0 -0
  213. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
  214. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
  215. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
  216. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/frame_processor.py +0 -0
  217. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/frameworks/__init__.py +0 -0
  218. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/frameworks/langchain.py +0 -0
  219. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/frameworks/rtvi.py +0 -0
  220. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/frameworks/strands_agents.py +0 -0
  221. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/gstreamer/__init__.py +0 -0
  222. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
  223. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/idle_frame_processor.py +0 -0
  224. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/logger.py +0 -0
  225. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/metrics/__init__.py +0 -0
  226. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/metrics/frame_processor_metrics.py +0 -0
  227. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/metrics/sentry.py +0 -0
  228. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/producer_processor.py +0 -0
  229. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/text_transformer.py +0 -0
  230. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/transcript_processor.py +0 -0
  231. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
  232. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/processors/user_idle_processor.py +0 -0
  233. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/py.typed +0 -0
  234. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/runner/__init__.py +0 -0
  235. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/runner/daily.py +0 -0
  236. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/runner/livekit.py +0 -0
  237. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/runner/run.py +0 -0
  238. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/runner/types.py +0 -0
  239. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/runner/utils.py +0 -0
  240. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/serializers/__init__.py +0 -0
  241. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/serializers/asterisk.py +0 -0
  242. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/serializers/base_serializer.py +0 -0
  243. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/serializers/convox.py +0 -0
  244. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/serializers/custom.py +0 -0
  245. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/serializers/exotel.py +0 -0
  246. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/serializers/livekit.py +0 -0
  247. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/serializers/plivo.py +0 -0
  248. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/serializers/protobuf.py +0 -0
  249. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/serializers/telnyx.py +0 -0
  250. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/serializers/twilio.py +0 -0
  251. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/__init__.py +0 -0
  252. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/ai_service.py +0 -0
  253. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/ai_services.py +0 -0
  254. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/anthropic/__init__.py +0 -0
  255. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/anthropic/llm.py +0 -0
  256. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/assemblyai/__init__.py +0 -0
  257. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/assemblyai/models.py +0 -0
  258. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/assemblyai/stt.py +0 -0
  259. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/asyncai/__init__.py +0 -0
  260. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/asyncai/tts.py +0 -0
  261. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/aws/__init__.py +0 -0
  262. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/aws/llm.py +0 -0
  263. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/aws/nova_sonic/__init__.py +0 -0
  264. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/aws/nova_sonic/context.py +0 -0
  265. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/aws/nova_sonic/frames.py +0 -0
  266. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/aws/nova_sonic/llm.py +0 -0
  267. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/aws/nova_sonic/ready.wav +0 -0
  268. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/aws/stt.py +0 -0
  269. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/aws/tts.py +0 -0
  270. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/aws/utils.py +0 -0
  271. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
  272. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
  273. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
  274. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
  275. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/azure/__init__.py +0 -0
  276. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/azure/common.py +0 -0
  277. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/azure/image.py +0 -0
  278. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/azure/llm.py +0 -0
  279. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/azure/realtime/__init__.py +0 -0
  280. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/azure/realtime/llm.py +0 -0
  281. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/azure/stt.py +0 -0
  282. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/azure/tts.py +0 -0
  283. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/cartesia/__init__.py +0 -0
  284. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/cartesia/stt.py +0 -0
  285. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/cartesia/tts.py +0 -0
  286. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/cerebras/__init__.py +0 -0
  287. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/cerebras/llm.py +0 -0
  288. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/deepgram/__init__.py +0 -0
  289. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/deepgram/flux/__init__.py +0 -0
  290. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/deepgram/flux/stt.py +0 -0
  291. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/deepgram/stt.py +0 -0
  292. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/deepgram/tts.py +0 -0
  293. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/deepseek/__init__.py +0 -0
  294. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/deepseek/llm.py +0 -0
  295. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/elevenlabs/__init__.py +0 -0
  296. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/elevenlabs/stt.py +0 -0
  297. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/elevenlabs/tts.py +0 -0
  298. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/fal/__init__.py +0 -0
  299. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/fal/image.py +0 -0
  300. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/fal/stt.py +0 -0
  301. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/fireworks/__init__.py +0 -0
  302. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/fireworks/llm.py +0 -0
  303. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/fish/__init__.py +0 -0
  304. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/fish/tts.py +0 -0
  305. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
  306. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
  307. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/gemini_multimodal_live/file_api.py +0 -0
  308. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
  309. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/gladia/__init__.py +0 -0
  310. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/gladia/config.py +0 -0
  311. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/gladia/stt.py +0 -0
  312. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/google/__init__.py +0 -0
  313. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/google/frames.py +0 -0
  314. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/google/gemini_live/__init__.py +0 -0
  315. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/google/gemini_live/file_api.py +0 -0
  316. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/google/gemini_live/llm.py +0 -0
  317. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/google/gemini_live/llm_vertex.py +0 -0
  318. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/google/google.py +0 -0
  319. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/google/image.py +0 -0
  320. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/google/llm.py +0 -0
  321. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/google/llm_openai.py +0 -0
  322. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/google/llm_vertex.py +0 -0
  323. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/google/rtvi.py +0 -0
  324. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/google/stt.py +0 -0
  325. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/google/tts.py +0 -0
  326. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/grok/__init__.py +0 -0
  327. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/grok/llm.py +0 -0
  328. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/groq/__init__.py +0 -0
  329. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/groq/llm.py +0 -0
  330. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/groq/stt.py +0 -0
  331. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/groq/tts.py +0 -0
  332. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/hamsa/__init__.py +0 -0
  333. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/hamsa/stt.py +0 -0
  334. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/heygen/__init__.py +0 -0
  335. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/heygen/api.py +0 -0
  336. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/heygen/client.py +0 -0
  337. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/heygen/video.py +0 -0
  338. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/hume/__init__.py +0 -0
  339. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/hume/tts.py +0 -0
  340. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/image_service.py +0 -0
  341. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/inworld/__init__.py +0 -0
  342. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/inworld/tts.py +0 -0
  343. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/llm_service.py +0 -0
  344. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/lmnt/__init__.py +0 -0
  345. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/lmnt/tts.py +0 -0
  346. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/mcp_service.py +0 -0
  347. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/mem0/__init__.py +0 -0
  348. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/mem0/memory.py +0 -0
  349. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/minimax/__init__.py +0 -0
  350. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/minimax/tts.py +0 -0
  351. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/mistral/__init__.py +0 -0
  352. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/mistral/llm.py +0 -0
  353. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/moondream/__init__.py +0 -0
  354. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/moondream/vision.py +0 -0
  355. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/neuphonic/__init__.py +0 -0
  356. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/neuphonic/tts.py +0 -0
  357. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/nim/__init__.py +0 -0
  358. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/nim/llm.py +0 -0
  359. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/ollama/__init__.py +0 -0
  360. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/ollama/llm.py +0 -0
  361. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai/__init__.py +0 -0
  362. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai/base_llm.py +0 -0
  363. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai/image.py +0 -0
  364. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai/llm.py +0 -0
  365. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai/realtime/__init__.py +0 -0
  366. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai/realtime/context.py +0 -0
  367. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai/realtime/events.py +0 -0
  368. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai/realtime/frames.py +0 -0
  369. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai/realtime/llm.py +0 -0
  370. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai/stt.py +0 -0
  371. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai/tts.py +0 -0
  372. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai_realtime/__init__.py +0 -0
  373. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai_realtime/azure.py +0 -0
  374. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai_realtime/context.py +0 -0
  375. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai_realtime/events.py +0 -0
  376. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai_realtime/frames.py +0 -0
  377. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
  378. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
  379. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
  380. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
  381. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
  382. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
  383. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openpipe/__init__.py +0 -0
  384. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openpipe/llm.py +0 -0
  385. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openrouter/__init__.py +0 -0
  386. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/openrouter/llm.py +0 -0
  387. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/perplexity/__init__.py +0 -0
  388. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/perplexity/llm.py +0 -0
  389. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/piper/__init__.py +0 -0
  390. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/piper/tts.py +0 -0
  391. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/playht/__init__.py +0 -0
  392. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/playht/tts.py +0 -0
  393. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/qwen/__init__.py +0 -0
  394. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/qwen/llm.py +0 -0
  395. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/rime/__init__.py +0 -0
  396. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/rime/tts.py +0 -0
  397. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/riva/__init__.py +0 -0
  398. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/riva/stt.py +0 -0
  399. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/riva/tts.py +0 -0
  400. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/sambanova/__init__.py +0 -0
  401. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/sambanova/llm.py +0 -0
  402. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/sambanova/stt.py +0 -0
  403. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/sarvam/__init__.py +0 -0
  404. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/sarvam/stt.py +0 -0
  405. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/sarvam/tts.py +0 -0
  406. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/simli/__init__.py +0 -0
  407. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/simli/video.py +0 -0
  408. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/soniox/__init__.py +0 -0
  409. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/soniox/stt.py +0 -0
  410. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/speechmatics/__init__.py +0 -0
  411. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/speechmatics/stt.py +0 -0
  412. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/stt_service.py +0 -0
  413. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/tavus/__init__.py +0 -0
  414. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/tavus/video.py +0 -0
  415. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/together/__init__.py +0 -0
  416. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/together/llm.py +0 -0
  417. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/tts_service.py +0 -0
  418. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/ultravox/__init__.py +0 -0
  419. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/ultravox/stt.py +0 -0
  420. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/vision_service.py +0 -0
  421. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/vistaar/__init__.py +0 -0
  422. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/vistaar/llm.py +0 -0
  423. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/websocket_service.py +0 -0
  424. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/whisper/__init__.py +0 -0
  425. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/whisper/base_stt.py +0 -0
  426. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/whisper/stt.py +0 -0
  427. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/xtts/__init__.py +0 -0
  428. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/services/xtts/tts.py +0 -0
  429. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/sync/__init__.py +0 -0
  430. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/sync/base_notifier.py +0 -0
  431. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/sync/event_notifier.py +0 -0
  432. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/tests/__init__.py +0 -0
  433. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/tests/utils.py +0 -0
  434. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transcriptions/__init__.py +0 -0
  435. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transcriptions/language.py +0 -0
  436. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/__init__.py +0 -0
  437. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/base_input.py +0 -0
  438. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/base_output.py +0 -0
  439. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/base_transport.py +0 -0
  440. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/daily/__init__.py +0 -0
  441. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/daily/transport.py +0 -0
  442. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/daily/utils.py +0 -0
  443. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/heygen/__init__.py +0 -0
  444. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/heygen/transport.py +0 -0
  445. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/livekit/__init__.py +0 -0
  446. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/livekit/transport.py +0 -0
  447. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/local/__init__.py +0 -0
  448. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/local/audio.py +0 -0
  449. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/local/tk.py +0 -0
  450. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/network/__init__.py +0 -0
  451. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/network/fastapi_websocket.py +0 -0
  452. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/network/small_webrtc.py +0 -0
  453. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/network/webrtc_connection.py +0 -0
  454. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/network/websocket_client.py +0 -0
  455. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/network/websocket_server.py +0 -0
  456. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/services/__init__.py +0 -0
  457. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/services/daily.py +0 -0
  458. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/services/helpers/__init__.py +0 -0
  459. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
  460. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/services/livekit.py +0 -0
  461. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/services/tavus.py +0 -0
  462. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/smallwebrtc/__init__.py +0 -0
  463. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/smallwebrtc/connection.py +0 -0
  464. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/smallwebrtc/request_handler.py +0 -0
  465. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/smallwebrtc/transport.py +0 -0
  466. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/tavus/__init__.py +0 -0
  467. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/tavus/transport.py +0 -0
  468. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/websocket/__init__.py +0 -0
  469. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/websocket/client.py +0 -0
  470. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/websocket/fastapi.py +0 -0
  471. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/websocket/server.py +0 -0
  472. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/whatsapp/__init__.py +0 -0
  473. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/whatsapp/api.py +0 -0
  474. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/transports/whatsapp/client.py +0 -0
  475. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/__init__.py +0 -0
  476. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/asyncio/__init__.py +0 -0
  477. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/asyncio/task_manager.py +0 -0
  478. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/base_object.py +0 -0
  479. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/logger_config.py +0 -0
  480. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/network.py +0 -0
  481. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/string.py +0 -0
  482. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/text/__init__.py +0 -0
  483. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
  484. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/text/base_text_filter.py +0 -0
  485. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
  486. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
  487. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
  488. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
  489. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/time.py +0 -0
  490. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/tracing/__init__.py +0 -0
  491. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/tracing/class_decorators.py +0 -0
  492. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
  493. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/tracing/service_attributes.py +0 -0
  494. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/tracing/service_decorators.py +0 -0
  495. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/tracing/setup.py +0 -0
  496. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
  497. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
  498. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/src/pipecat/utils/utils.py +0 -0
  499. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/stop_container.yml +0 -0
  500. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/test_elevenlabs_stt_segmented.py +0 -0
  501. {dv_pipecat_ai-0.0.85.dev698 → dv_pipecat_ai-0.0.85.dev699}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.85.dev698
3
+ Version: 0.0.85.dev699
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.85.dev698
3
+ Version: 0.0.85.dev699
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
@@ -400,6 +400,8 @@ src/pipecat/services/rime/tts.py
400
400
  src/pipecat/services/riva/__init__.py
401
401
  src/pipecat/services/riva/stt.py
402
402
  src/pipecat/services/riva/tts.py
403
+ src/pipecat/services/salesforce/__init__.py
404
+ src/pipecat/services/salesforce/llm.py
403
405
  src/pipecat/services/sambanova/__init__.py
404
406
  src/pipecat/services/sambanova/llm.py
405
407
  src/pipecat/services/sambanova/stt.py
@@ -0,0 +1,9 @@
1
+ #
2
+ # Copyright (c) 2024–2025, Daily
3
+ #
4
+ # SPDX-License-Identifier: BSD 2-Clause License
5
+ #
6
+
7
+ from .llm import SalesforceAgentLLMService
8
+
9
+ __all__ = ["SalesforceAgentLLMService"]
@@ -0,0 +1,465 @@
1
+ #
2
+ # Copyright (c) 2024–2025, Daily
3
+ #
4
+ # SPDX-License-Identifier: BSD 2-Clause License
5
+ #
6
+
7
+ """Salesforce Agent API LLM service implementation."""
8
+
9
+ import asyncio
10
+ import json
11
+ import os
12
+ import time
13
+ from typing import Any, Dict, List, Optional, AsyncGenerator
14
+ from dataclasses import dataclass
15
+
16
+ import httpx
17
+ from loguru import logger
18
+
19
+ from pipecat.frames.frames import (
20
+ Frame,
21
+ LLMFullResponseEndFrame,
22
+ LLMFullResponseStartFrame,
23
+ LLMMessagesFrame,
24
+ LLMTextFrame,
25
+ LLMUpdateSettingsFrame,
26
+ )
27
+ from pipecat.processors.aggregators.openai_llm_context import (
28
+ OpenAILLMContext,
29
+ OpenAILLMContextFrame,
30
+ )
31
+ from pipecat.processors.frame_processor import FrameDirection
32
+ from pipecat.services.llm_service import LLMService
33
+ from pipecat.services.openai.llm import (
34
+ OpenAIAssistantContextAggregator,
35
+ OpenAIContextAggregatorPair,
36
+ OpenAIUserContextAggregator,
37
+ )
38
+ from pipecat.processors.aggregators.llm_response import (
39
+ LLMAssistantAggregatorParams,
40
+ LLMUserAggregatorParams,
41
+ )
42
+ from env_config import api_config
43
+
44
+
45
+ @dataclass
46
+ class SalesforceSessionInfo:
47
+ """Information about an active Salesforce Agent session."""
48
+
49
+ session_id: str
50
+ agent_id: str
51
+ created_at: float
52
+ last_used: float
53
+
54
+
55
+ class SalesforceAgentLLMService(LLMService):
56
+ """Salesforce Agent API LLM service implementation.
57
+
58
+ This service integrates with Salesforce Agent API to provide conversational
59
+ AI capabilities using Salesforce's Agentforce platform. It follows the same
60
+ pattern as Vistaar LLM service for proper frame processing.
61
+ """
62
+
63
+ def __init__(
64
+ self,
65
+ *,
66
+ model: str = "salesforce-agent",
67
+ session_timeout_secs: float = 3600.0,
68
+ **kwargs,
69
+ ):
70
+ """Initialize Salesforce Agent LLM service.
71
+
72
+ Reads configuration from environment variables:
73
+ - SALESFORCE_AGENT_ID: The Salesforce agent ID to interact with
74
+ - SALESFORCE_API_KEY: OAuth access token (optional, will use client credentials if not provided)
75
+ - SALESFORCE_ORG_DOMAIN: Salesforce org domain (e.g., https://myorg.my.salesforce.com)
76
+ - SALESFORCE_CLIENT_ID: Connected app client ID for OAuth
77
+ - SALESFORCE_CLIENT_SECRET: Connected app client secret for OAuth
78
+ - SALESFORCE_API_HOST: Salesforce API host (default: https://api.salesforce.com)
79
+
80
+ Args:
81
+ model: The model name (defaults to "salesforce-agent").
82
+ session_timeout_secs: Session timeout in seconds (default: 1 hour).
83
+ **kwargs: Additional arguments passed to parent LLMService.
84
+ """
85
+ # Initialize parent LLM service
86
+ super().__init__(**kwargs)
87
+
88
+ self._agent_id = api_config.SALESFORCE_AGENT_ID
89
+ self._api_key = api_config.SALESFORCE_API_KEY
90
+ self._org_domain = api_config.SALESFORCE_ORG_DOMAIN
91
+ self._client_id = api_config.SALESFORCE_CLIENT_ID
92
+ self._client_secret = api_config.SALESFORCE_CLIENT_SECRET
93
+ self._api_host = api_config.SALESFORCE_API_HOST
94
+
95
+
96
+ # Validate required environment variables
97
+ required_vars = {
98
+ "SALESFORCE_AGENT_ID": self._agent_id,
99
+ "SALESFORCE_ORG_DOMAIN": self._org_domain,
100
+ "SALESFORCE_CLIENT_ID": self._client_id,
101
+ "SALESFORCE_CLIENT_SECRET": self._client_secret,
102
+ }
103
+
104
+ missing_vars = [var for var, value in required_vars.items() if not value]
105
+ if missing_vars:
106
+ raise ValueError(f"Missing required environment variables: {', '.join(missing_vars)}")
107
+
108
+ logger.info(f"Salesforce LLM initialized - Agent ID: {self._agent_id}")
109
+
110
+ self._session_timeout_secs = session_timeout_secs
111
+
112
+ # Session management
113
+ self._sessions: Dict[str, SalesforceSessionInfo] = {}
114
+ self._current_session_id: Optional[str] = None
115
+
116
+ # HTTP client for API calls
117
+ self._http_client = httpx.AsyncClient(timeout=30.0)
118
+
119
+
120
+ async def __aenter__(self):
121
+ """Async context manager entry."""
122
+ return self
123
+
124
+ async def __aexit__(self, exc_type, exc_val, exc_tb):
125
+ """Async context manager exit."""
126
+ await self._cleanup_sessions()
127
+ await self._http_client.aclose()
128
+
129
+ def can_generate_metrics(self) -> bool:
130
+ """Check if this service can generate processing metrics."""
131
+ return True
132
+
133
+ async def _get_access_token(self) -> str:
134
+ """Get OAuth access token using client credentials."""
135
+ if self._api_key and not self._api_key.startswith("Bearer"):
136
+ return self._api_key
137
+
138
+ token_url = f"{self._org_domain}/services/oauth2/token"
139
+ data = {
140
+ "grant_type": "client_credentials",
141
+ "client_id": self._client_id,
142
+ "client_secret": self._client_secret,
143
+ }
144
+
145
+ try:
146
+ response = await self._http_client.post(token_url, data=data)
147
+ response.raise_for_status()
148
+ token_data = response.json()
149
+ return token_data["access_token"]
150
+ except Exception as e:
151
+ logger.error(f"Failed to get access token: {e}")
152
+ raise
153
+
154
+ async def _create_session(self) -> str:
155
+ """Create a new Salesforce Agent session."""
156
+ access_token = await self._get_access_token()
157
+ session_url = f"{self._api_host}/einstein/ai-agent/v1/agents/{self._agent_id}/sessions"
158
+
159
+ headers = {
160
+ "Authorization": f"Bearer {access_token}",
161
+ "Content-Type": "application/json",
162
+ }
163
+
164
+ external_session_key = f"pipecat-{int(time.time())}-{id(self)}"
165
+
166
+ payload = {
167
+ "externalSessionKey": external_session_key,
168
+ "instanceConfig": {"endpoint": self._org_domain},
169
+ "tz": "America/Los_Angeles",
170
+ "variables": [{"name": "$Context.EndUserLanguage", "type": "Text", "value": "en_US"}],
171
+ "featureSupport": "Streaming",
172
+ "streamingCapabilities": {"chunkTypes": ["Text"]},
173
+ "bypassUser": True,
174
+ }
175
+
176
+ try:
177
+ response = await self._http_client.post(session_url, headers=headers, json=payload)
178
+ response.raise_for_status()
179
+ session_data = response.json()
180
+ session_id = session_data["sessionId"]
181
+
182
+ # Store session info
183
+ current_time = time.time()
184
+ self._sessions[session_id] = SalesforceSessionInfo(
185
+ session_id=session_id,
186
+ agent_id=self._agent_id,
187
+ created_at=current_time,
188
+ last_used=current_time,
189
+ )
190
+
191
+ logger.debug(f"Created Salesforce Agent session: {session_id}")
192
+ return session_id
193
+
194
+ except Exception as e:
195
+ logger.error(f"Failed to create Salesforce Agent session: {e}")
196
+ raise
197
+
198
+ async def _get_or_create_session(self) -> str:
199
+ """Get existing session or create a new one."""
200
+ current_time = time.time()
201
+
202
+ # Check if current session is still valid
203
+ if self._current_session_id and self._current_session_id in self._sessions:
204
+ session = self._sessions[self._current_session_id]
205
+ if current_time - session.last_used < self._session_timeout_secs:
206
+ session.last_used = current_time
207
+ return self._current_session_id
208
+ else:
209
+ # Session expired, remove it
210
+ del self._sessions[self._current_session_id]
211
+ self._current_session_id = None
212
+
213
+ # Create new session
214
+ self._current_session_id = await self._create_session()
215
+ return self._current_session_id
216
+
217
+ async def _cleanup_sessions(self):
218
+ """Clean up expired sessions."""
219
+ current_time = time.time()
220
+ expired_sessions = []
221
+
222
+ for session_id, session in self._sessions.items():
223
+ if current_time - session.last_used > self._session_timeout_secs:
224
+ expired_sessions.append(session_id)
225
+
226
+ for session_id in expired_sessions:
227
+ try:
228
+ # End the session via API
229
+ access_token = await self._get_access_token()
230
+ url = f"{self._api_host}/einstein/ai-agent/v1/sessions/{session_id}"
231
+ headers = {
232
+ "Authorization": f"Bearer {access_token}",
233
+ "x-session-end-reason": "UserRequest",
234
+ }
235
+ await self._http_client.delete(url, headers=headers)
236
+ except Exception as e:
237
+ logger.warning(f"Failed to end session {session_id}: {e}")
238
+ finally:
239
+ del self._sessions[session_id]
240
+ if self._current_session_id == session_id:
241
+ self._current_session_id = None
242
+
243
+ def _extract_user_message(self, context: OpenAILLMContext) -> str:
244
+ """Extract the last user message from context.
245
+
246
+ Similar to Vistaar pattern - extract only the most recent user message.
247
+
248
+ Args:
249
+ context: The OpenAI LLM context containing messages.
250
+
251
+ Returns:
252
+ The last user message as a string.
253
+ """
254
+ messages = context.get_messages()
255
+
256
+ # Find the last user message (iterate in reverse for efficiency)
257
+ for message in reversed(messages):
258
+ if message.get("role") == "user":
259
+ content = message.get("content", "")
260
+
261
+ # Handle content that might be a list (for multimodal messages)
262
+ if isinstance(content, list):
263
+ text_parts = [
264
+ item.get("text", "") for item in content if item.get("type") == "text"
265
+ ]
266
+ content = " ".join(text_parts)
267
+
268
+ if isinstance(content, str):
269
+ return content.strip()
270
+
271
+ return ""
272
+
273
+ def _generate_sequence_id(self) -> int:
274
+ """Generate a sequence ID for the message."""
275
+ return int(time.time() * 1000) % 2147483647 # Keep within int32 range
276
+
277
+ async def _stream_salesforce_response(self, session_id: str, user_message: str) -> AsyncGenerator[str, None]:
278
+ """Stream response from Salesforce Agent API."""
279
+ access_token = await self._get_access_token()
280
+ url = f"{self._api_host}/einstein/ai-agent/v1/sessions/{session_id}/messages/stream"
281
+
282
+ headers = {
283
+ "Authorization": f"Bearer {access_token}",
284
+ "Content-Type": "application/json",
285
+ "Accept": "text/event-stream",
286
+ }
287
+
288
+ message_data = {
289
+ "message": {
290
+ "sequenceId": self._generate_sequence_id(),
291
+ "type": "Text",
292
+ "text": user_message
293
+ },
294
+ "variables": [
295
+ {
296
+ "name": "$Context.EndUserLanguage",
297
+ "type": "Text",
298
+ "value": "en_US"
299
+ }
300
+ ]
301
+ }
302
+
303
+ try:
304
+ logger.info(f"🌐 Salesforce API request: {user_message[:50]}...")
305
+ async with self._http_client.stream("POST", url, headers=headers, json=message_data) as response:
306
+ response.raise_for_status()
307
+
308
+ async for line in response.aiter_lines():
309
+ if not line:
310
+ continue
311
+
312
+ # Parse SSE format
313
+ if line.startswith("data: "):
314
+ try:
315
+ data = json.loads(line[6:])
316
+ message = data.get("message", {})
317
+ message_type = message.get("type")
318
+
319
+ if message_type == "TextChunk":
320
+ content = message.get("text", "") or message.get("message", "")
321
+ if content:
322
+ yield content
323
+ elif message_type == "EndOfTurn":
324
+ logger.info("🏁 Salesforce response complete")
325
+ break
326
+ elif message_type == "Inform":
327
+ # Skip INFORM events to avoid duplication
328
+ continue
329
+
330
+ except json.JSONDecodeError as e:
331
+ logger.warning(f"JSON decode error: {e}, line: {line}")
332
+ continue
333
+
334
+ except Exception as e:
335
+ logger.error(f"Failed to stream from Salesforce Agent API: {e}")
336
+ raise
337
+
338
+ async def _process_context(self, context: OpenAILLMContext):
339
+ """Process the LLM context and generate streaming response.
340
+
341
+ Following Vistaar pattern for simple, direct processing.
342
+
343
+ Args:
344
+ context: The OpenAI LLM context containing messages to process.
345
+ """
346
+ logger.info(f"🔄 Salesforce processing context with {len(context.get_messages())} messages")
347
+
348
+ # Extract user message from context first
349
+ user_message = self._extract_user_message(context)
350
+
351
+ if not user_message:
352
+ logger.warning("Salesforce: No user message found in context")
353
+ return
354
+
355
+ try:
356
+ logger.info(f"🎯 Salesforce extracted query: {user_message}")
357
+
358
+ # Start response
359
+ await self.push_frame(LLMFullResponseStartFrame())
360
+ await self.push_frame(LLMFullResponseStartFrame(),FrameDirection.UPSTREAM)
361
+ await self.start_processing_metrics()
362
+ await self.start_ttfb_metrics()
363
+
364
+ # Get or create session
365
+ session_id = await self._get_or_create_session()
366
+
367
+ first_chunk = True
368
+
369
+ # Stream the response
370
+ async for text_chunk in self._stream_salesforce_response(session_id, user_message):
371
+ if first_chunk:
372
+ await self.stop_ttfb_metrics()
373
+ first_chunk = False
374
+
375
+ # Push each text chunk as it arrives
376
+ await self.push_frame(LLMTextFrame(text=text_chunk))
377
+
378
+ except Exception as e:
379
+ logger.error(f"Salesforce context processing error: {type(e).__name__}: {str(e)}")
380
+ import traceback
381
+ logger.error(f"Salesforce traceback: {traceback.format_exc()}")
382
+ raise
383
+ finally:
384
+ await self.stop_processing_metrics()
385
+ await self.push_frame(LLMFullResponseEndFrame())
386
+ await self.push_frame(LLMFullResponseEndFrame(), FrameDirection.UPSTREAM)
387
+
388
+ async def process_frame(self, frame: Frame, direction: FrameDirection):
389
+ """Process frames for LLM completion requests.
390
+
391
+ Following the exact Vistaar pattern - call super() for non-context frames only.
392
+
393
+ Args:
394
+ frame: The frame to process.
395
+ direction: The direction of frame processing.
396
+ """
397
+ context = None
398
+ if isinstance(frame, OpenAILLMContextFrame):
399
+ context = frame.context
400
+ logger.info(f"🔍 Received OpenAILLMContextFrame with {len(context.get_messages())} messages")
401
+ elif isinstance(frame, LLMMessagesFrame):
402
+ context = OpenAILLMContext.from_messages(frame.messages)
403
+ logger.info(f"🔍 Received LLMMessagesFrame with {len(frame.messages)} messages")
404
+ elif isinstance(frame, LLMUpdateSettingsFrame):
405
+ # Call super for settings frames and update settings
406
+ await super().process_frame(frame, direction)
407
+ settings = frame.settings
408
+ logger.debug(f"Updated Salesforce settings: {settings}")
409
+ else:
410
+ # For non-context frames, call super and push them downstream
411
+ await super().process_frame(frame, direction)
412
+ await self.push_frame(frame, direction)
413
+
414
+ if context:
415
+ try:
416
+ await self._process_context(context)
417
+ except httpx.TimeoutException:
418
+ logger.error("Timeout while processing Salesforce request")
419
+ await self._call_event_handler("on_completion_timeout")
420
+ except Exception as e:
421
+ logger.error(f"Error processing Salesforce request: {e}")
422
+ raise
423
+
424
+ def create_context_aggregator(
425
+ self,
426
+ context: OpenAILLMContext,
427
+ *,
428
+ user_params: LLMUserAggregatorParams = LLMUserAggregatorParams(),
429
+ assistant_params: LLMAssistantAggregatorParams = LLMAssistantAggregatorParams(),
430
+ ) -> OpenAIContextAggregatorPair:
431
+ """Create context aggregators for Salesforce LLM.
432
+
433
+ Since Salesforce uses OpenAI-compatible message format, we reuse OpenAI's
434
+ context aggregators directly, similar to how Vistaar works.
435
+
436
+ Args:
437
+ context: The LLM context to create aggregators for.
438
+ user_params: Parameters for user message aggregation.
439
+ assistant_params: Parameters for assistant message aggregation.
440
+
441
+ Returns:
442
+ OpenAIContextAggregatorPair: A pair of OpenAI context aggregators,
443
+ compatible with Salesforce's OpenAI-like message format.
444
+ """
445
+ context.set_llm_adapter(self.get_llm_adapter())
446
+ user = OpenAIUserContextAggregator(context, params=user_params)
447
+ assistant = OpenAIAssistantContextAggregator(context, params=assistant_params)
448
+ return OpenAIContextAggregatorPair(_user=user, _assistant=assistant)
449
+
450
+ def get_llm_adapter(self):
451
+ """Get the LLM adapter for this service."""
452
+ from pipecat.adapters.services.open_ai_adapter import OpenAILLMAdapter
453
+ return OpenAILLMAdapter()
454
+
455
+ async def close(self):
456
+ """Close the HTTP client when the service is destroyed."""
457
+ await self._cleanup_sessions()
458
+ await self._http_client.aclose()
459
+
460
+ def __del__(self):
461
+ """Ensure the client is closed on deletion."""
462
+ try:
463
+ asyncio.create_task(self._http_client.aclose())
464
+ except:
465
+ pass