dv-pipecat-ai 0.0.82.dev776__tar.gz → 0.0.82.dev807__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 (420) hide show
  1. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/github.yml +12 -0
  2. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/smart-auto-release.yml +23 -19
  3. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.gitignore +1 -1
  4. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/PKG-INFO +1 -1
  5. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/keda-scaledobject.yaml +4 -3
  6. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/values-prod.yaml +3 -3
  7. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/values-stage.yaml +3 -3
  8. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/values.yaml +2 -2
  9. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/dv_pipecat_ai.egg-info/PKG-INFO +1 -1
  10. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/dv_pipecat_ai.egg-info/SOURCES.txt +2 -0
  11. dv_pipecat_ai-0.0.82.dev807/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
  12. dv_pipecat_ai-0.0.82.dev807/src/pipecat/services/vistaar/__init__.py +5 -0
  13. dv_pipecat_ai-0.0.82.dev807/src/pipecat/services/vistaar/llm.py +377 -0
  14. dv_pipecat_ai-0.0.82.dev776/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
  15. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.dockerignore +0 -0
  16. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
  17. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
  18. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
  19. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
  20. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
  21. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
  22. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
  23. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  24. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  25. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/build.yaml +0 -0
  26. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/coverage.yaml +0 -0
  27. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/format.yaml +0 -0
  28. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/promote-prod.yml +0 -0
  29. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/publish.yaml +0 -0
  30. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/publish_test.yaml +0 -0
  31. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/python-compatibility.yaml +0 -0
  32. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/set-traffic-split.yml +0 -0
  33. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/sync-quickstart.yaml +0 -0
  34. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/tests.yaml +0 -0
  35. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.pre-commit-config.yaml +0 -0
  36. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.readthedocs.yaml +0 -0
  37. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/CHANGELOG.md +0 -0
  38. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/CHANGELOG.md.template +0 -0
  39. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/CLAUDE.md +0 -0
  40. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/CONTRIBUTING.md +0 -0
  41. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/DOCKER_BUILD_OPTIMIZATION_SUMMARY.md +0 -0
  42. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/LICENSE +0 -0
  43. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/MANIFEST.in +0 -0
  44. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/README.md +0 -0
  45. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/ansible.cfg +0 -0
  46. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/ansible_deployment.sh +0 -0
  47. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/cleanup_old_containers.yml +0 -0
  48. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/codecov.yml +0 -0
  49. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/create-new-machine/ansible.cfg +0 -0
  50. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/create-new-machine/ansible_setup.sh +0 -0
  51. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/create-new-machine/inventory.ini +0 -0
  52. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/create-new-machine/replace_env.yml +0 -0
  53. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/create-new-machine/setup_playbook.yml +0 -0
  54. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/create_inventory.py +0 -0
  55. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/delete_old_dockers.sh +0 -0
  56. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/deploy.sh +0 -0
  57. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/deploy_playbook.yml +0 -0
  58. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/docker-compose.dev.yml +0 -0
  59. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/dump_logs.yml +0 -0
  60. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/env.example +0 -0
  61. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/fetch_logs.yml +0 -0
  62. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/inventory.ini +0 -0
  63. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/.helmignore +0 -0
  64. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/Chart.yaml +0 -0
  65. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
  66. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
  67. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/cluster-role.yaml +0 -0
  68. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
  69. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
  70. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
  71. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/keda-api-key-secret.yaml +0 -0
  72. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/keda-trigger-auth.yaml +0 -0
  73. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/service.yaml +0 -0
  74. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/values-canary.yaml +0 -0
  75. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/istio/destination-virtualservice.yaml +0 -0
  76. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/merge-code-into-single-file.sh +0 -0
  77. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/pipecat.png +0 -0
  78. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/pyproject.toml +0 -0
  79. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/restart.sh +0 -0
  80. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/restart_playbook.yml +0 -0
  81. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/setup.cfg +0 -0
  82. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/dv_pipecat_ai.egg-info/dependency_links.txt +0 -0
  83. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/dv_pipecat_ai.egg-info/requires.txt +0 -0
  84. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/dv_pipecat_ai.egg-info/top_level.txt +0 -0
  85. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/__init__.py +0 -0
  86. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/__init__.py +0 -0
  87. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/base_llm_adapter.py +0 -0
  88. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/schemas/__init__.py +0 -0
  89. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/schemas/direct_function.py +0 -0
  90. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/schemas/function_schema.py +0 -0
  91. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
  92. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/services/__init__.py +0 -0
  93. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
  94. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/services/aws_nova_sonic_adapter.py +0 -0
  95. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
  96. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
  97. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
  98. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/services/open_ai_realtime_adapter.py +0 -0
  99. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/__init__.py +0 -0
  100. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/filters/__init__.py +0 -0
  101. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
  102. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/filters/koala_filter.py +0 -0
  103. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/filters/krisp_filter.py +0 -0
  104. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
  105. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/filters/pyrnn_local_filter.py +0 -0
  106. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/interruptions/__init__.py +0 -0
  107. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
  108. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +0 -0
  109. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/mixers/__init__.py +0 -0
  110. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
  111. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
  112. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/resamplers/__init__.py +0 -0
  113. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
  114. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
  115. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
  116. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/resamplers/soxr_stream_resampler.py +0 -0
  117. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/turn/__init__.py +0 -0
  118. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
  119. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
  120. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/turn/smart_turn/base_smart_turn.py +0 -0
  121. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/turn/smart_turn/fal_smart_turn.py +0 -0
  122. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/turn/smart_turn/http_smart_turn.py +0 -0
  123. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py +0 -0
  124. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/turn/smart_turn/local_smart_turn.py +0 -0
  125. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/turn/smart_turn/local_smart_turn_v2.py +0 -0
  126. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/utils.py +0 -0
  127. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/vad/__init__.py +0 -0
  128. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/vad/data/__init__.py +0 -0
  129. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/vad/silero.py +0 -0
  130. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
  131. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/clocks/__init__.py +0 -0
  132. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/clocks/base_clock.py +0 -0
  133. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/clocks/system_clock.py +0 -0
  134. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/extensions/__init__.py +0 -0
  135. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/extensions/voicemail/__init__.py +0 -0
  136. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/extensions/voicemail/voicemail_detector.py +0 -0
  137. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/frames/__init__.py +0 -0
  138. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/frames/frames.proto +0 -0
  139. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/frames/frames.py +0 -0
  140. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
  141. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/metrics/__init__.py +0 -0
  142. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/metrics/metrics.py +0 -0
  143. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/observers/__init__.py +0 -0
  144. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/observers/base_observer.py +0 -0
  145. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/observers/loggers/__init__.py +0 -0
  146. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
  147. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
  148. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
  149. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/observers/loggers/user_bot_latency_log_observer.py +0 -0
  150. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/observers/turn_tracking_observer.py +0 -0
  151. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/__init__.py +0 -0
  152. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/base_pipeline.py +0 -0
  153. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/base_task.py +0 -0
  154. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
  155. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/pipeline.py +0 -0
  156. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/runner.py +0 -0
  157. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
  158. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/task.py +0 -0
  159. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/task_observer.py +0 -0
  160. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/to_be_updated/merge_pipeline.py +0 -0
  161. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/__init__.py +0 -0
  162. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/__init__.py +0 -0
  163. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/dtmf_aggregator.py +0 -0
  164. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/gated.py +0 -0
  165. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/gated_openai_llm_context.py +0 -0
  166. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/llm_response.py +0 -0
  167. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
  168. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/sentence.py +0 -0
  169. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/user_response.py +0 -0
  170. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
  171. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/async_generator.py +0 -0
  172. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/audio/__init__.py +0 -0
  173. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
  174. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/consumer_processor.py +0 -0
  175. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/dtmf_aggregator.py +0 -0
  176. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/__init__.py +0 -0
  177. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/frame_filter.py +0 -0
  178. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/function_filter.py +0 -0
  179. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/identity_filter.py +0 -0
  180. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/null_filter.py +0 -0
  181. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
  182. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
  183. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
  184. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/frame_processor.py +0 -0
  185. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/frameworks/__init__.py +0 -0
  186. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/frameworks/langchain.py +0 -0
  187. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/frameworks/rtvi.py +0 -0
  188. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/gstreamer/__init__.py +0 -0
  189. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
  190. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/idle_frame_processor.py +0 -0
  191. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/logger.py +0 -0
  192. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/metrics/__init__.py +0 -0
  193. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/metrics/frame_processor_metrics.py +0 -0
  194. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/metrics/sentry.py +0 -0
  195. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/producer_processor.py +0 -0
  196. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/text_transformer.py +0 -0
  197. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/transcript_processor.py +0 -0
  198. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/two_stage_user_idle_processor.py +0 -0
  199. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/user_idle_processor.py +0 -0
  200. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/py.typed +0 -0
  201. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/runner/__init__.py +0 -0
  202. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/runner/daily.py +0 -0
  203. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/runner/livekit.py +0 -0
  204. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/runner/run.py +0 -0
  205. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/runner/types.py +0 -0
  206. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/runner/utils.py +0 -0
  207. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/__init__.py +0 -0
  208. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/base_serializer.py +0 -0
  209. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/convox.py +0 -0
  210. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/exotel.py +0 -0
  211. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/genesys.py +0 -0
  212. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/livekit.py +0 -0
  213. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/plivo.py +0 -0
  214. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/protobuf.py +0 -0
  215. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/telnyx.py +0 -0
  216. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/twilio.py +0 -0
  217. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/__init__.py +0 -0
  218. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/ai_service.py +0 -0
  219. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/ai_services.py +0 -0
  220. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/anthropic/__init__.py +0 -0
  221. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/anthropic/llm.py +0 -0
  222. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/assemblyai/__init__.py +0 -0
  223. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/assemblyai/models.py +0 -0
  224. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/assemblyai/stt.py +0 -0
  225. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/asyncai/__init__.py +0 -0
  226. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/asyncai/tts.py +0 -0
  227. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws/__init__.py +0 -0
  228. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws/llm.py +0 -0
  229. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws/stt.py +0 -0
  230. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws/tts.py +0 -0
  231. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws/utils.py +0 -0
  232. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
  233. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
  234. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
  235. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
  236. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws_nova_sonic/ready.wav +0 -0
  237. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/azure/__init__.py +0 -0
  238. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/azure/common.py +0 -0
  239. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/azure/image.py +0 -0
  240. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/azure/llm.py +0 -0
  241. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/azure/stt.py +0 -0
  242. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/azure/tts.py +0 -0
  243. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/cartesia/__init__.py +0 -0
  244. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/cartesia/stt.py +0 -0
  245. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/cartesia/tts.py +0 -0
  246. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/cerebras/__init__.py +0 -0
  247. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/cerebras/llm.py +0 -0
  248. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/deepgram/__init__.py +0 -0
  249. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/deepgram/stt.py +0 -0
  250. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/deepgram/tts.py +0 -0
  251. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/deepseek/__init__.py +0 -0
  252. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/deepseek/llm.py +0 -0
  253. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/elevenlabs/__init__.py +0 -0
  254. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/elevenlabs/tts.py +0 -0
  255. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/fal/__init__.py +0 -0
  256. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/fal/image.py +0 -0
  257. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/fal/stt.py +0 -0
  258. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/fireworks/__init__.py +0 -0
  259. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/fireworks/llm.py +0 -0
  260. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/fish/__init__.py +0 -0
  261. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/fish/tts.py +0 -0
  262. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
  263. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
  264. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/gemini_multimodal_live/file_api.py +0 -0
  265. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
  266. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/gladia/__init__.py +0 -0
  267. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/gladia/config.py +0 -0
  268. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/gladia/stt.py +0 -0
  269. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/__init__.py +0 -0
  270. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/frames.py +0 -0
  271. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/google.py +0 -0
  272. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/image.py +0 -0
  273. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/llm.py +0 -0
  274. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/llm_openai.py +0 -0
  275. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/llm_vertex.py +0 -0
  276. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/rtvi.py +0 -0
  277. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/stt.py +0 -0
  278. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/test-google-chirp.py +0 -0
  279. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/tts.py +0 -0
  280. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/grok/__init__.py +0 -0
  281. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/grok/llm.py +0 -0
  282. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/groq/__init__.py +0 -0
  283. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/groq/llm.py +0 -0
  284. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/groq/stt.py +0 -0
  285. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/groq/tts.py +0 -0
  286. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/hamsa/__init__.py +0 -0
  287. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/hamsa/stt.py +0 -0
  288. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/heygen/__init__.py +0 -0
  289. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/heygen/api.py +0 -0
  290. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/heygen/client.py +0 -0
  291. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/heygen/video.py +0 -0
  292. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/image_service.py +0 -0
  293. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/inworld/__init__.py +0 -0
  294. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/inworld/tts.py +0 -0
  295. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/llm_service.py +0 -0
  296. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/lmnt/__init__.py +0 -0
  297. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/lmnt/tts.py +0 -0
  298. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/mcp_service.py +0 -0
  299. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/mem0/__init__.py +0 -0
  300. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/mem0/memory.py +0 -0
  301. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/minimax/__init__.py +0 -0
  302. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/minimax/tts.py +0 -0
  303. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/mistral/__init__.py +0 -0
  304. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/mistral/llm.py +0 -0
  305. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/moondream/__init__.py +0 -0
  306. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/moondream/vision.py +0 -0
  307. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/neuphonic/__init__.py +0 -0
  308. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/neuphonic/tts.py +0 -0
  309. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/nim/__init__.py +0 -0
  310. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/nim/llm.py +0 -0
  311. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/ollama/__init__.py +0 -0
  312. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/ollama/llm.py +0 -0
  313. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai/__init__.py +0 -0
  314. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai/base_llm.py +0 -0
  315. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai/image.py +0 -0
  316. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai/llm.py +0 -0
  317. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai/stt.py +0 -0
  318. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai/tts.py +0 -0
  319. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai.py +0 -0
  320. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
  321. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
  322. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
  323. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
  324. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
  325. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
  326. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openpipe/__init__.py +0 -0
  327. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openpipe/llm.py +0 -0
  328. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openrouter/__init__.py +0 -0
  329. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openrouter/llm.py +0 -0
  330. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/perplexity/__init__.py +0 -0
  331. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/perplexity/llm.py +0 -0
  332. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/piper/__init__.py +0 -0
  333. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/piper/tts.py +0 -0
  334. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/playht/__init__.py +0 -0
  335. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/playht/tts.py +0 -0
  336. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/qwen/__init__.py +0 -0
  337. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/qwen/llm.py +0 -0
  338. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/rime/__init__.py +0 -0
  339. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/rime/tts.py +0 -0
  340. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/riva/__init__.py +0 -0
  341. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/riva/stt.py +0 -0
  342. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/riva/tts.py +0 -0
  343. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/sambanova/__init__.py +0 -0
  344. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/sambanova/llm.py +0 -0
  345. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/sambanova/stt.py +0 -0
  346. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/sarvam/__init__.py +0 -0
  347. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/sarvam/tts.py +0 -0
  348. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/simli/__init__.py +0 -0
  349. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/simli/video.py +0 -0
  350. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/soniox/__init__.py +0 -0
  351. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/soniox/stt.py +0 -0
  352. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/speechmatics/__init__.py +0 -0
  353. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/speechmatics/stt.py +0 -0
  354. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/stt_service.py +0 -0
  355. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/tavus/__init__.py +0 -0
  356. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/tavus/video.py +0 -0
  357. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/together/__init__.py +0 -0
  358. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/together/llm.py +0 -0
  359. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/tts_service.py +0 -0
  360. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/ultravox/__init__.py +0 -0
  361. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/ultravox/stt.py +0 -0
  362. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/vision_service.py +0 -0
  363. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/websocket_service.py +0 -0
  364. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/whisper/__init__.py +0 -0
  365. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/whisper/base_stt.py +0 -0
  366. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/whisper/stt.py +0 -0
  367. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/xtts/__init__.py +0 -0
  368. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/xtts/tts.py +0 -0
  369. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/sync/__init__.py +0 -0
  370. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/sync/base_notifier.py +0 -0
  371. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/sync/event_notifier.py +0 -0
  372. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/tests/__init__.py +0 -0
  373. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/tests/utils.py +0 -0
  374. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transcriptions/__init__.py +0 -0
  375. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transcriptions/language.py +0 -0
  376. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/__init__.py +0 -0
  377. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/base_input.py +0 -0
  378. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/base_output.py +0 -0
  379. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/base_transport.py +0 -0
  380. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/local/__init__.py +0 -0
  381. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/local/audio.py +0 -0
  382. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/local/tk.py +0 -0
  383. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/network/__init__.py +0 -0
  384. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/network/fastapi_websocket.py +0 -0
  385. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/network/small_webrtc.py +0 -0
  386. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/network/webrtc_connection.py +0 -0
  387. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/network/websocket_client.py +0 -0
  388. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/network/websocket_server.py +0 -0
  389. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/services/__init__.py +0 -0
  390. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/services/daily.py +0 -0
  391. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/services/helpers/__init__.py +0 -0
  392. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
  393. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/services/livekit.py +0 -0
  394. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/services/tavus.py +0 -0
  395. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/__init__.py +0 -0
  396. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/asyncio/__init__.py +0 -0
  397. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/asyncio/task_manager.py +0 -0
  398. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/base_object.py +0 -0
  399. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/logger_config.py +0 -0
  400. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/network.py +0 -0
  401. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/string.py +0 -0
  402. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/text/__init__.py +0 -0
  403. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
  404. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/text/base_text_filter.py +0 -0
  405. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
  406. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
  407. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
  408. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
  409. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/time.py +0 -0
  410. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/__init__.py +0 -0
  411. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/class_decorators.py +0 -0
  412. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
  413. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/service_attributes.py +0 -0
  414. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/service_decorators.py +0 -0
  415. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/setup.py +0 -0
  416. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
  417. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
  418. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/utils.py +0 -0
  419. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/stop_container.yml +0 -0
  420. {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/uv.lock +0 -0
@@ -251,11 +251,17 @@ jobs:
251
251
  echo "❌ ADMIN_API_KEY not found in SECRETS_JSON"
252
252
  exit 1
253
253
  fi
254
+ STAGE_CALLING_BACKEND_URL=$(echo "$SECRETS_JSON" | jq -r '.CALLING_BACKEND_URL // empty')
255
+ if [ -z "$STAGE_CALLING_BACKEND_URL" ]; then
256
+ echo "❌ CALLING_BACKEND_URL not found in SECRETS_JSON"
257
+ exit 1
258
+ fi
254
259
  helm upgrade --install $HELM_RELEASE_NAME ./k8s/dv-pipecat \
255
260
  -f ./k8s/dv-pipecat/values-stage.yaml \
256
261
  --set image.repository=$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME \
257
262
  --set image.tag=$GITHUB_SHA \
258
263
  --set ADMIN_API_KEY="${STAGE_ADMIN_API_KEY}" \
264
+ --set CALLING_BACKEND_URL="${STAGE_CALLING_BACKEND_URL}" \
259
265
  --namespace default
260
266
 
261
267
  # 2) **ONLY** when branch is dv-main: deploy/update the CANARY release
@@ -267,6 +273,11 @@ jobs:
267
273
  echo "❌ ADMIN_API_KEY not found in SECRETS_JSON"
268
274
  exit 1
269
275
  fi
276
+ PROD_CALLING_BACKEND_URL=$(echo "$SECRETS_JSON" | jq -r '.CALLING_BACKEND_URL // empty')
277
+ if [ -z "$PROD_CALLING_BACKEND_URL" ]; then
278
+ echo "❌ CALLING_BACKEND_URL not found in SECRETS_JSON"
279
+ exit 1
280
+ fi
270
281
  echo "🚀 Deploying canary service..."
271
282
  helm upgrade --install ${HELM_RELEASE_NAME}-canary ./k8s/dv-pipecat \
272
283
  -f ./k8s/dv-pipecat/values-prod.yaml \
@@ -274,6 +285,7 @@ jobs:
274
285
  --set image.repository=$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME \
275
286
  --set image.tag=$GITHUB_SHA \
276
287
  --set ADMIN_API_KEY="${PROD_ADMIN_API_KEY}" \
288
+ --set CALLING_BACKEND_URL="${PROD_CALLING_BACKEND_URL}" \
277
289
  --namespace default
278
290
 
279
291
  # - name: Deployment validation
@@ -53,40 +53,44 @@ jobs:
53
53
  run: |
54
54
  echo "Getting current versions..."
55
55
 
56
- # Get latest PyPI version using helper script
57
- PYPI_VERSION=$(python scripts/get-pypi-version.py ${{ env.PACKAGE_NAME }})
58
- echo "PYPI_VERSION=$PYPI_VERSION" >> $GITHUB_OUTPUT
59
-
60
- # Get remote-requirements.txt version
56
+ # Get merged branch (dv-stage) requirements version
61
57
  if [ -f "${{ env.REQUIREMENTS_FILE }}" ]; then
62
- REQUIREMENTS_VERSION=$(grep "${{ env.PACKAGE_NAME }}" ${{ env.REQUIREMENTS_FILE }} | sed -n 's/.*==\([^]]*\).*/\1/p')
63
- echo "REQUIREMENTS_VERSION=$REQUIREMENTS_VERSION" >> $GITHUB_OUTPUT
58
+ MERGED_REQUIREMENTS_VERSION=$(grep "${{ env.PACKAGE_NAME }}" ${{ env.REQUIREMENTS_FILE }} | sed -n 's/.*==\([^]]*\).*/\1/p')
59
+ echo "MERGED_REQUIREMENTS_VERSION=$MERGED_REQUIREMENTS_VERSION" >> $GITHUB_OUTPUT
64
60
  else
65
- echo "REQUIREMENTS_VERSION=0.0.0.dev0" >> $GITHUB_OUTPUT
61
+ echo "MERGED_REQUIREMENTS_VERSION=0.0.0.dev0" >> $GITHUB_OUTPUT
62
+ fi
63
+
64
+ # Get base branch requirements version
65
+ git show ${{ github.event.pull_request.base.sha }}:${{ env.REQUIREMENTS_FILE }} > base_requirements.txt 2>/dev/null || echo "dv-pipecat-ai==0.0.0.dev0" > base_requirements.txt
66
+ BASE_REQUIREMENTS_VERSION=$(grep "${{ env.PACKAGE_NAME }}" base_requirements.txt | sed -n 's/.*==\([^]]*\).*/\1/p')
67
+ if [ -z "$BASE_REQUIREMENTS_VERSION" ]; then
68
+ BASE_REQUIREMENTS_VERSION="0.0.0.dev0"
66
69
  fi
70
+ echo "BASE_REQUIREMENTS_VERSION=$BASE_REQUIREMENTS_VERSION" >> $GITHUB_OUTPUT
67
71
 
68
72
  echo "📊 Version Status:"
69
- echo " PyPI version: $PYPI_VERSION"
70
- echo " Requirements version: $REQUIREMENTS_VERSION"
73
+ echo " Base branch requirements version: $BASE_REQUIREMENTS_VERSION"
74
+ echo " Merged branch requirements version: $MERGED_REQUIREMENTS_VERSION"
71
75
 
72
76
  - name: Decide release action
73
77
  if: steps.check-changes.outputs.HAS_PIPECAT_CHANGES == 'true'
74
78
  id: decision
75
79
  run: |
76
- PYPI_VERSION="${{ steps.versions.outputs.PYPI_VERSION }}"
77
- REQUIREMENTS_VERSION="${{ steps.versions.outputs.REQUIREMENTS_VERSION }}"
80
+ BASE_VERSION="${{ steps.versions.outputs.BASE_REQUIREMENTS_VERSION }}"
81
+ MERGED_VERSION="${{ steps.versions.outputs.MERGED_REQUIREMENTS_VERSION }}"
78
82
 
79
83
  echo "🤔 Decision Logic:"
80
- echo " PyPI version: $PYPI_VERSION"
81
- echo " Requirements version: $REQUIREMENTS_VERSION"
84
+ echo " Base branch version: $BASE_VERSION"
85
+ echo " Merged branch version: $MERGED_VERSION"
82
86
 
83
- if [ "$PYPI_VERSION" = "$REQUIREMENTS_VERSION" ]; then
87
+ if [ "$BASE_VERSION" = "$MERGED_VERSION" ]; then
84
88
  echo "SHOULD_RELEASE=true" >> $GITHUB_OUTPUT
85
- echo "REASON=Versions match - auto-bumping needed" >> $GITHUB_OUTPUT
86
- echo "✅ Decision: AUTO-RELEASE (versions match)"
89
+ echo "REASON=Versions match between branches - auto-bumping needed" >> $GITHUB_OUTPUT
90
+ echo "✅ Decision: AUTO-RELEASE (versions match between branches)"
87
91
  else
88
92
  echo "SHOULD_RELEASE=false" >> $GITHUB_OUTPUT
89
- echo "REASON=Developer already updated version" >> $GITHUB_OUTPUT
93
+ echo "REASON=Developer already updated version in this PR" >> $GITHUB_OUTPUT
90
94
  echo "⏭️ Decision: SKIP (developer handled versioning)"
91
95
  fi
92
96
 
@@ -98,7 +102,7 @@ jobs:
98
102
  SKIP_REASON="No src/pipecat changes in this PR"
99
103
  else
100
104
  echo "⏭️ SKIPPING: ${{ steps.decision.outputs.REASON }}"
101
- SKIP_REASON="Developer already updated version"
105
+ SKIP_REASON="Developer already updated version in this PR"
102
106
  fi
103
107
  echo "Skip reason: $SKIP_REASON"
104
108
 
@@ -6,7 +6,7 @@ venv
6
6
  .venv
7
7
  /.idea
8
8
  #*#
9
- data/
9
+ # data/
10
10
  # Distribution / packaging
11
11
  .Python
12
12
  build/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.82.dev776
3
+ Version: 0.0.82.dev807
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
@@ -44,11 +44,12 @@ spec:
44
44
  name: {{ include "dv-pipecat.fullname" . }}-http-auth
45
45
  metadata:
46
46
  # The URL of your API
47
- url: "https://67397cb486a3.ngrok-free.app/ca/api/v0/admin/global/predicted-concurrency"
47
+ # url: "https://67397cb486a3.ngrok-free.app/ca/api/v0/admin/global/predicted-pods"
48
+ url: {{ .Values.CALLING_BACKEND_URL }}/admin/global/predicted-pods
48
49
  # The JMESPath to find the number in the JSON response
49
- valueLocation: {{ .Values.keda.jsonPath | default "concurrency" | quote }}
50
+ valueLocation: {{ .Values.keda.jsonPath | default "predicted_pods" | quote }}
50
51
  # This is the divisor. KEDA calculates: desired_pods = (api_value / targetValue)
51
- targetValue: {{ .Values.keda.targetValue | default "5" | quote }}
52
+ targetValue: {{ .Values.keda.targetValue | default "1" | quote }}
52
53
  # Authentication configuration
53
54
  authMode: "apiKey"
54
55
  method: "header"
@@ -66,9 +66,9 @@ terminationGracePeriodSeconds: 270 # 4.5 minutes
66
66
 
67
67
  # KEDA Configuration for production
68
68
  keda:
69
- enabled: false
70
- jsonPath: "concurrency"
71
- targetValue: "5"
69
+ enabled: true
70
+ jsonPath: "predicted_pods"
71
+ targetValue: "1"
72
72
  minReplicaCount: 4
73
73
  maxReplicaCount: 200
74
74
  pollingInterval: 60
@@ -61,10 +61,10 @@ terminationGracePeriodSeconds: 270 # 4.5 minutes
61
61
  # KEDA Configuration for staging
62
62
  keda:
63
63
  enabled: true
64
- jsonPath: "concurrency"
65
- targetValue: "5"
64
+ jsonPath: "predicted_pods"
65
+ targetValue: "1"
66
66
  minReplicaCount: 1
67
- maxReplicaCount: 30
67
+ maxReplicaCount: 2
68
68
  pollingInterval: 30
69
69
  cooldownPeriod: 30
70
70
  # Staging-optimized scaling behavior to prevent fluctuations
@@ -129,9 +129,9 @@ envFrom:
129
129
  keda:
130
130
  enabled: false
131
131
  # JSON path to extract the scheduled calls value
132
- jsonPath: "concurrency"
132
+ jsonPath: "predicted_pods"
133
133
  # Target value for scaling (calls per pod)
134
- targetValue: "5"
134
+ targetValue: "1"
135
135
  # HTTP method for API calls
136
136
  httpMethod: "GET"
137
137
  # Custom HTTP headers (optional)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.82.dev776
3
+ Version: 0.0.82.dev807
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
@@ -358,6 +358,8 @@ src/pipecat/services/together/__init__.py
358
358
  src/pipecat/services/together/llm.py
359
359
  src/pipecat/services/ultravox/__init__.py
360
360
  src/pipecat/services/ultravox/stt.py
361
+ src/pipecat/services/vistaar/__init__.py
362
+ src/pipecat/services/vistaar/llm.py
361
363
  src/pipecat/services/whisper/__init__.py
362
364
  src/pipecat/services/whisper/base_stt.py
363
365
  src/pipecat/services/whisper/stt.py
@@ -0,0 +1,5 @@
1
+ """Vistaar AI service implementations."""
2
+
3
+ from .llm import VistaarLLMService
4
+
5
+ __all__ = ["VistaarLLMService"]
@@ -0,0 +1,377 @@
1
+ """Vistaar LLM Service implementation."""
2
+
3
+ import asyncio
4
+ import json
5
+ import time
6
+ import uuid
7
+ from dataclasses import dataclass
8
+ from typing import Any, AsyncGenerator, Dict, Optional
9
+ from urllib.parse import urlencode
10
+
11
+ import httpx
12
+ from loguru import logger
13
+ from pydantic import BaseModel, Field
14
+
15
+ from pipecat.frames.frames import (
16
+ Frame,
17
+ LLMFullResponseEndFrame,
18
+ LLMFullResponseStartFrame,
19
+ LLMMessagesFrame,
20
+ LLMTextFrame,
21
+ LLMUpdateSettingsFrame,
22
+ StartInterruptionFrame,
23
+ StopInterruptionFrame,
24
+ )
25
+ from pipecat.processors.aggregators.llm_response import (
26
+ LLMAssistantAggregatorParams,
27
+ LLMUserAggregatorParams,
28
+ )
29
+ from pipecat.processors.aggregators.openai_llm_context import (
30
+ OpenAILLMContext,
31
+ OpenAILLMContextFrame,
32
+ )
33
+ from pipecat.services.openai.llm import (
34
+ OpenAIAssistantContextAggregator,
35
+ OpenAIContextAggregatorPair,
36
+ OpenAIUserContextAggregator,
37
+ )
38
+ from pipecat.processors.frame_processor import FrameDirection
39
+ from pipecat.services.llm_service import LLMService
40
+
41
+
42
+ class VistaarLLMService(LLMService):
43
+ """A service for interacting with Vistaar's voice API using Server-Sent Events.
44
+
45
+ This service handles text generation through Vistaar's SSE endpoint which
46
+ streams responses in real-time. Vistaar maintains all conversation context
47
+ server-side via session_id, so we only send the latest user message.
48
+ """
49
+
50
+ class InputParams(BaseModel):
51
+ """Input parameters for Vistaar model configuration.
52
+
53
+ Parameters:
54
+ source_lang: Source language code (e.g., 'mr' for Marathi, 'hi' for Hindi).
55
+ target_lang: Target language code for responses.
56
+ session_id: Session ID for maintaining conversation context.
57
+ extra: Additional model-specific parameters.
58
+ """
59
+
60
+ source_lang: Optional[str] = Field(default="mr")
61
+ target_lang: Optional[str] = Field(default="mr")
62
+ session_id: Optional[str] = Field(default=None)
63
+ extra: Optional[Dict[str, Any]] = Field(default_factory=dict)
64
+
65
+ def __init__(
66
+ self,
67
+ *,
68
+ base_url: str = "https://vistaar.kenpath.ai/api",
69
+ params: Optional[InputParams] = None,
70
+ timeout: float = 30.0,
71
+ **kwargs,
72
+ ):
73
+ """Initialize Vistaar LLM service.
74
+
75
+ Args:
76
+ base_url: The base URL for Vistaar API. Defaults to "https://vistaar.kenpath.ai/api".
77
+ params: Input parameters for model configuration and behavior.
78
+ timeout: Request timeout in seconds. Defaults to 30.0 seconds.
79
+ **kwargs: Additional arguments passed to the parent LLMService.
80
+ """
81
+ super().__init__(**kwargs)
82
+
83
+ params = params or VistaarLLMService.InputParams()
84
+
85
+ self._base_url = base_url.rstrip("/")
86
+ self._source_lang = params.source_lang
87
+ self._target_lang = params.target_lang
88
+ self._session_id = params.session_id or str(uuid.uuid4())
89
+ self._extra = params.extra if isinstance(params.extra, dict) else {}
90
+ self._timeout = timeout
91
+
92
+ # Create an async HTTP client
93
+ self._client = httpx.AsyncClient(timeout=httpx.Timeout(self._timeout))
94
+
95
+ # Interruption handling state
96
+ self._current_response = None # Track current HTTP response stream
97
+ self._is_interrupted = False # Track if current generation was interrupted
98
+ self._partial_response = [] # Track what was actually sent before interruption
99
+
100
+ logger.info(
101
+ f"Vistaar LLM initialized - Base URL: {self._base_url}, Session ID: {self._session_id}, Source Lang: {self._source_lang}, Target Lang: {self._target_lang}, Timeout: {self._timeout}s"
102
+ )
103
+
104
+ async def _extract_messages_to_query(self, context: OpenAILLMContext) -> str:
105
+ """Extract only the last user message from context.
106
+
107
+ Since Vistaar maintains context server-side via session_id,
108
+ we only need to send the most recent user message.
109
+
110
+ As a fallback for context synchronization, we can optionally include
111
+ information about interrupted responses.
112
+
113
+ Args:
114
+ context: The OpenAI LLM context containing messages.
115
+
116
+ Returns:
117
+ The last user message as a query string, optionally with context hints.
118
+ """
119
+ messages = context.get_messages()
120
+ query_parts = []
121
+
122
+ # Include interrupted response context as a hint (optional fallback strategy)
123
+ if hasattr(self, "_last_interrupted_response"):
124
+ interrupted_text = self._last_interrupted_response[:100] # Limit length
125
+ query_parts.append(
126
+ f"[Context: I was previously saying '{interrupted_text}...' when interrupted]"
127
+ )
128
+ # Clear the interrupted response after using it
129
+ delattr(self, "_last_interrupted_response")
130
+
131
+ # Find the last user message (iterate in reverse for efficiency)
132
+ for message in reversed(messages):
133
+ if message.get("role") == "user":
134
+ content = message.get("content", "")
135
+
136
+ # Handle content that might be a list (for multimodal messages)
137
+ if isinstance(content, list):
138
+ text_parts = [
139
+ item.get("text", "") for item in content if item.get("type") == "text"
140
+ ]
141
+ content = " ".join(text_parts)
142
+
143
+ if isinstance(content, str):
144
+ query_parts.append(content.strip())
145
+ break
146
+
147
+ # If no user message found, return empty string or just context
148
+ return " ".join(query_parts) if query_parts else ""
149
+
150
+ async def _handle_interruption(self):
151
+ """Handle interruption by cancelling ongoing stream."""
152
+ logger.debug("Handling interruption for Vistaar LLM")
153
+
154
+ # Set interruption flag
155
+ self._is_interrupted = True
156
+
157
+ # Cancel ongoing HTTP response stream if active
158
+ if self._current_response:
159
+ try:
160
+ await self._current_response.aclose()
161
+ logger.debug("Closed active Vistaar response stream")
162
+ except Exception as e:
163
+ logger.warning(f"Error closing Vistaar response stream: {e}")
164
+ finally:
165
+ self._current_response = None
166
+
167
+ # Store partial response for potential inclusion in next query
168
+ if self._partial_response:
169
+ partial_text = "".join(self._partial_response)
170
+ logger.debug(f"Storing interrupted response: {partial_text[:100]}...")
171
+ # Store the interrupted response for next query context
172
+ self._last_interrupted_response = partial_text
173
+
174
+ # Clear current partial response
175
+ self._partial_response = []
176
+
177
+ async def _stream_response(self, query: str) -> AsyncGenerator[str, None]:
178
+ """Stream response from Vistaar API using Server-Sent Events.
179
+
180
+ Args:
181
+ query: The user's query to send to the API.
182
+
183
+ Yields:
184
+ Text chunks from the streaming response.
185
+ """
186
+ # Prepare query parameters
187
+ params = {
188
+ "query": query,
189
+ "session_id": self._session_id,
190
+ "source_lang": self._source_lang,
191
+ "target_lang": self._target_lang,
192
+ }
193
+
194
+ # Add any extra parameters
195
+ params.update(self._extra)
196
+
197
+ # Construct the full URL with query parameters
198
+ url = f"{self._base_url}/voice/?{urlencode(params)}"
199
+
200
+ logger.info(
201
+ f"Vistaar API request - URL: {self._base_url}/voice/, Session: {self._session_id}, Query: {query[:100]}..."
202
+ )
203
+ logger.debug(f"Full URL with params: {url}")
204
+
205
+ # Reset interruption state and partial response for new request
206
+ self._is_interrupted = False
207
+ self._partial_response = []
208
+
209
+ try:
210
+ # Use httpx to handle SSE streaming
211
+ async with self._client.stream("GET", url) as response:
212
+ self._current_response = response # Store for potential cancellation
213
+ response.raise_for_status()
214
+
215
+ # Process the SSE stream
216
+ async for line in response.aiter_lines():
217
+ # Check for interruption before processing each line
218
+ if self._is_interrupted:
219
+ logger.debug("Stream interrupted, stopping processing")
220
+ break
221
+
222
+ if not line:
223
+ continue
224
+
225
+ self._partial_response.append(line) # Track what we're sending
226
+ yield line
227
+
228
+ except httpx.HTTPStatusError as e:
229
+ logger.error(
230
+ f"Vistaar HTTP error - Status: {e.response.status_code}, URL: {url}, Response: {e.response.text if hasattr(e.response, 'text') else 'N/A'}"
231
+ )
232
+ raise
233
+ except httpx.TimeoutException as e:
234
+ logger.error(f"Vistaar timeout error - URL: {url}, Timeout: {self._timeout}s")
235
+ raise
236
+ except Exception as e:
237
+ logger.error(
238
+ f"Vistaar unexpected error - Type: {type(e).__name__}, Message: {str(e)}, URL: {url}"
239
+ )
240
+ raise
241
+ finally:
242
+ # Clean up response reference
243
+ self._current_response = None
244
+
245
+ async def _process_context(self, context: OpenAILLMContext):
246
+ """Process the LLM context and generate streaming response.
247
+
248
+ Args:
249
+ context: The OpenAI LLM context containing messages to process.
250
+ """
251
+ logger.info(f"Vistaar processing context - Session: {self._session_id}")
252
+ try:
253
+ # Extract query from context
254
+ query = await self._extract_messages_to_query(context)
255
+
256
+ if not query:
257
+ logger.warning(
258
+ f"Vistaar: No query extracted from context - Session: {self._session_id}"
259
+ )
260
+ return
261
+
262
+ logger.info(f"Vistaar extracted query: {query}")
263
+
264
+ logger.debug(f"Processing query: {query[:100]}...")
265
+
266
+ # Start response
267
+ await self.push_frame(LLMFullResponseStartFrame())
268
+ await self.start_processing_metrics()
269
+ await self.start_ttfb_metrics()
270
+
271
+ first_chunk = True
272
+ full_response = []
273
+
274
+ # Stream the response
275
+ async for text_chunk in self._stream_response(query):
276
+ if first_chunk:
277
+ await self.stop_ttfb_metrics()
278
+ first_chunk = False
279
+
280
+ # Push each text chunk as it arrives
281
+ await self.push_frame(LLMTextFrame(text=text_chunk))
282
+ full_response.append(text_chunk)
283
+
284
+ # No need to update context - Vistaar maintains all context server-side
285
+ # The response has already been sent via LLMTextFrame chunks
286
+
287
+ except Exception as e:
288
+ logger.error(
289
+ f"Vistaar context processing error - Session: {self._session_id}, Error: {type(e).__name__}: {str(e)}"
290
+ )
291
+ import traceback
292
+
293
+ logger.error(f"Vistaar traceback: {traceback.format_exc()}")
294
+ raise
295
+ finally:
296
+ await self.stop_processing_metrics()
297
+ await self.push_frame(LLMFullResponseEndFrame())
298
+
299
+ async def process_frame(self, frame: Frame, direction: FrameDirection):
300
+ """Process frames for LLM completion requests.
301
+
302
+ Handles OpenAILLMContextFrame, LLMMessagesFrame, and LLMUpdateSettingsFrame
303
+ to trigger LLM completions and manage settings.
304
+
305
+ Args:
306
+ frame: The frame to process.
307
+ direction: The direction of frame processing.
308
+ """
309
+ await super().process_frame(frame, direction)
310
+ context = None
311
+ if isinstance(frame, StartInterruptionFrame):
312
+ await self._handle_interruption()
313
+ await self.push_frame(frame, direction)
314
+ return
315
+ elif isinstance(frame, OpenAILLMContextFrame):
316
+ context = frame.context
317
+ elif isinstance(frame, LLMMessagesFrame):
318
+ context = OpenAILLMContext.from_messages(frame.messages)
319
+ elif isinstance(frame, LLMUpdateSettingsFrame):
320
+ # Update settings if needed
321
+ settings = frame.settings
322
+ if "source_lang" in settings:
323
+ self._source_lang = settings["source_lang"]
324
+ if "target_lang" in settings:
325
+ self._target_lang = settings["target_lang"]
326
+ if "session_id" in settings:
327
+ self._session_id = settings["session_id"]
328
+ logger.debug(f"Updated Vistaar settings: {settings}")
329
+ else:
330
+ await self.push_frame(frame, direction)
331
+
332
+ if context:
333
+ try:
334
+ await self._process_context(context)
335
+ except httpx.TimeoutException:
336
+ logger.error("Timeout while processing Vistaar request")
337
+ await self._call_event_handler("on_completion_timeout")
338
+ except Exception as e:
339
+ logger.error(f"Error processing Vistaar request: {e}")
340
+ raise
341
+
342
+ def create_context_aggregator(
343
+ self,
344
+ context: OpenAILLMContext,
345
+ *,
346
+ user_params: LLMUserAggregatorParams = LLMUserAggregatorParams(),
347
+ assistant_params: LLMAssistantAggregatorParams = LLMAssistantAggregatorParams(),
348
+ ) -> OpenAIContextAggregatorPair:
349
+ """Create context aggregators for Vistaar LLM.
350
+
351
+ Since Vistaar uses OpenAI-compatible message format, we reuse OpenAI's
352
+ context aggregators directly, similar to how Groq and Azure services work.
353
+
354
+ Args:
355
+ context: The LLM context to create aggregators for.
356
+ user_params: Parameters for user message aggregation.
357
+ assistant_params: Parameters for assistant message aggregation.
358
+
359
+ Returns:
360
+ OpenAIContextAggregatorPair: A pair of OpenAI context aggregators,
361
+ compatible with Vistaar's OpenAI-like message format.
362
+ """
363
+ context.set_llm_adapter(self.get_llm_adapter())
364
+ user = OpenAIUserContextAggregator(context, params=user_params)
365
+ assistant = OpenAIAssistantContextAggregator(context, params=assistant_params)
366
+ return OpenAIContextAggregatorPair(_user=user, _assistant=assistant)
367
+
368
+ async def close(self):
369
+ """Close the HTTP client when the service is destroyed."""
370
+ await self._client.aclose()
371
+
372
+ def __del__(self):
373
+ """Ensure the client is closed on deletion."""
374
+ try:
375
+ asyncio.create_task(self._client.aclose())
376
+ except:
377
+ pass