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.
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/github.yml +12 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/smart-auto-release.yml +23 -19
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.gitignore +1 -1
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/PKG-INFO +1 -1
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/keda-scaledobject.yaml +4 -3
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/values-prod.yaml +3 -3
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/values-stage.yaml +3 -3
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/values.yaml +2 -2
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/dv_pipecat_ai.egg-info/PKG-INFO +1 -1
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/dv_pipecat_ai.egg-info/SOURCES.txt +2 -0
- dv_pipecat_ai-0.0.82.dev807/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
- dv_pipecat_ai-0.0.82.dev807/src/pipecat/services/vistaar/__init__.py +5 -0
- dv_pipecat_ai-0.0.82.dev807/src/pipecat/services/vistaar/llm.py +377 -0
- dv_pipecat_ai-0.0.82.dev776/src/pipecat/audio/vad/data/silero_vad.onnx +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.dockerignore +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/1-bug_report.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/2-question.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/3-feature_request.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/4-service-issue.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/5-new-service.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/6-dependency.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/7-troubleshooting.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/build.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/coverage.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/format.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/promote-prod.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/publish.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/publish_test.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/python-compatibility.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/set-traffic-split.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/sync-quickstart.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/tests.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.pre-commit-config.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.readthedocs.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/CHANGELOG.md +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/CHANGELOG.md.template +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/CLAUDE.md +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/CONTRIBUTING.md +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/DOCKER_BUILD_OPTIMIZATION_SUMMARY.md +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/LICENSE +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/MANIFEST.in +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/README.md +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/ansible.cfg +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/ansible_deployment.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/cleanup_old_containers.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/codecov.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/create-new-machine/ansible.cfg +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/create-new-machine/ansible_setup.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/create-new-machine/inventory.ini +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/create-new-machine/replace_env.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/create-new-machine/setup_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/create_inventory.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/delete_old_dockers.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/deploy.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/deploy_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/docker-compose.dev.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/dump_logs.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/env.example +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/fetch_logs.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/inventory.ini +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/.helmignore +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/Chart.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/_helpers.tpl +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/backendconfig.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/cluster-role.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/deployment.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/hpa.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/ingress.yaml +0 -0
- {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
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/keda-trigger-auth.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/templates/service.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/values-canary.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/istio/destination-virtualservice.yaml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/merge-code-into-single-file.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/pipecat.png +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/pyproject.toml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/restart.sh +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/restart_playbook.yml +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/setup.cfg +0 -0
- {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
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/dv_pipecat_ai.egg-info/requires.txt +0 -0
- {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
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/base_llm_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/schemas/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/schemas/direct_function.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/schemas/function_schema.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/schemas/tools_schema.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/services/anthropic_adapter.py +0 -0
- {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
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/services/bedrock_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/services/gemini_adapter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/adapters/services/open_ai_adapter.py +0 -0
- {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
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/filters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/filters/base_audio_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/filters/koala_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/filters/krisp_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/filters/noisereduce_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/filters/pyrnn_local_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/interruptions/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/interruptions/base_interruption_strategy.py +0 -0
- {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
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/mixers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/mixers/base_audio_mixer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/mixers/soundfile_mixer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/resamplers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/resamplers/base_audio_resampler.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/resamplers/resampy_resampler.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/resamplers/soxr_resampler.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/resamplers/soxr_stream_resampler.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/turn/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/turn/base_turn_analyzer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/turn/smart_turn/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/vad/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/vad/data/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/vad/silero.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/audio/vad/vad_analyzer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/clocks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/clocks/base_clock.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/clocks/system_clock.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/extensions/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/extensions/voicemail/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/extensions/voicemail/voicemail_detector.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/frames/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/frames/frames.proto +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/frames/frames.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/frames/protobufs/frames_pb2.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/metrics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/metrics/metrics.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/observers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/observers/base_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/observers/loggers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/observers/loggers/debug_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/observers/loggers/llm_log_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/observers/loggers/transcription_log_observer.py +0 -0
- {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
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/observers/turn_tracking_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/base_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/base_task.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/parallel_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/pipeline.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/runner.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/sync_parallel_pipeline.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/task.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/pipeline/task_observer.py +0 -0
- {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
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/dtmf_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/gated.py +0 -0
- {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
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/llm_response.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/openai_llm_context.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/sentence.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/user_response.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/aggregators/vision_image_frame.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/async_generator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/audio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/audio/audio_buffer_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/consumer_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/dtmf_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/frame_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/function_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/identity_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/null_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/stt_mute_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/wake_check_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/filters/wake_notifier_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/frame_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/frameworks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/frameworks/langchain.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/frameworks/rtvi.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/gstreamer/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/gstreamer/pipeline_source.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/idle_frame_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/logger.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/metrics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/metrics/frame_processor_metrics.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/metrics/sentry.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/producer_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/text_transformer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/transcript_processor.py +0 -0
- {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
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/processors/user_idle_processor.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/py.typed +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/runner/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/runner/daily.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/runner/livekit.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/runner/run.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/runner/types.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/runner/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/base_serializer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/convox.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/exotel.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/genesys.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/livekit.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/plivo.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/protobuf.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/telnyx.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/serializers/twilio.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/ai_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/ai_services.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/anthropic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/anthropic/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/assemblyai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/assemblyai/models.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/assemblyai/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/asyncai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/asyncai/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws_nova_sonic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws_nova_sonic/aws.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws_nova_sonic/context.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws_nova_sonic/frames.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/aws_nova_sonic/ready.wav +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/azure/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/azure/common.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/azure/image.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/azure/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/azure/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/azure/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/cartesia/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/cartesia/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/cartesia/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/cerebras/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/cerebras/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/deepgram/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/deepgram/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/deepgram/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/deepseek/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/deepseek/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/elevenlabs/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/elevenlabs/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/fal/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/fal/image.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/fal/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/fireworks/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/fireworks/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/fish/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/fish/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/gemini_multimodal_live/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/gemini_multimodal_live/events.py +0 -0
- {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
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/gemini_multimodal_live/gemini.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/gladia/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/gladia/config.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/gladia/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/frames.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/google.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/image.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/llm_openai.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/llm_vertex.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/rtvi.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/test-google-chirp.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/google/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/grok/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/grok/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/groq/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/groq/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/groq/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/groq/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/hamsa/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/hamsa/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/heygen/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/heygen/api.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/heygen/client.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/heygen/video.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/image_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/inworld/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/inworld/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/llm_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/lmnt/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/lmnt/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/mcp_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/mem0/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/mem0/memory.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/minimax/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/minimax/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/mistral/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/mistral/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/moondream/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/moondream/vision.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/neuphonic/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/neuphonic/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/nim/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/nim/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/ollama/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/ollama/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai/base_llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai/image.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai_realtime_beta/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai_realtime_beta/azure.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai_realtime_beta/context.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai_realtime_beta/events.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai_realtime_beta/frames.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openai_realtime_beta/openai.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openpipe/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openpipe/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openrouter/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/openrouter/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/perplexity/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/perplexity/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/piper/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/piper/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/playht/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/playht/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/qwen/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/qwen/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/rime/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/rime/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/riva/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/riva/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/riva/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/sambanova/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/sambanova/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/sambanova/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/sarvam/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/sarvam/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/simli/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/simli/video.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/soniox/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/soniox/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/speechmatics/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/speechmatics/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/stt_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/tavus/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/tavus/video.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/together/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/together/llm.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/tts_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/ultravox/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/ultravox/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/vision_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/websocket_service.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/whisper/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/whisper/base_stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/whisper/stt.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/xtts/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/services/xtts/tts.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/sync/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/sync/base_notifier.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/sync/event_notifier.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/tests/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/tests/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transcriptions/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transcriptions/language.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/base_input.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/base_output.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/base_transport.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/local/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/local/audio.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/local/tk.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/network/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/network/fastapi_websocket.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/network/small_webrtc.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/network/webrtc_connection.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/network/websocket_client.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/network/websocket_server.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/services/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/services/daily.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/services/helpers/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/services/helpers/daily_rest.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/services/livekit.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/transports/services/tavus.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/asyncio/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/asyncio/task_manager.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/base_object.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/logger_config.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/network.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/string.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/text/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/text/base_text_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/text/base_text_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/text/markdown_text_filter.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/text/pattern_pair_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/text/simple_text_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/text/skip_tags_aggregator.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/time.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/__init__.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/class_decorators.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/conversation_context_provider.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/service_attributes.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/service_decorators.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/setup.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/turn_context_provider.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/tracing/turn_trace_observer.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/pipecat/utils/utils.py +0 -0
- {dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/stop_container.yml +0 -0
- {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
|
{dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/smart-auto-release.yml
RENAMED
|
@@ -53,40 +53,44 @@ jobs:
|
|
|
53
53
|
run: |
|
|
54
54
|
echo "Getting current versions..."
|
|
55
55
|
|
|
56
|
-
# Get
|
|
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
|
-
|
|
63
|
-
echo "
|
|
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 "
|
|
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 "
|
|
70
|
-
echo "
|
|
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
|
-
|
|
77
|
-
|
|
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 "
|
|
81
|
-
echo "
|
|
84
|
+
echo " Base branch version: $BASE_VERSION"
|
|
85
|
+
echo " Merged branch version: $MERGED_VERSION"
|
|
82
86
|
|
|
83
|
-
if [ "$
|
|
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
|
|
|
@@ -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-
|
|
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 "
|
|
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 "
|
|
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:
|
|
70
|
-
jsonPath: "
|
|
71
|
-
targetValue: "
|
|
69
|
+
enabled: true
|
|
70
|
+
jsonPath: "predicted_pods"
|
|
71
|
+
targetValue: "1"
|
|
72
72
|
minReplicaCount: 4
|
|
73
73
|
maxReplicaCount: 200
|
|
74
74
|
pollingInterval: 60
|
{dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/k8s/dv-pipecat/values-stage.yaml
RENAMED
|
@@ -61,10 +61,10 @@ terminationGracePeriodSeconds: 270 # 4.5 minutes
|
|
|
61
61
|
# KEDA Configuration for staging
|
|
62
62
|
keda:
|
|
63
63
|
enabled: true
|
|
64
|
-
jsonPath: "
|
|
65
|
-
targetValue: "
|
|
64
|
+
jsonPath: "predicted_pods"
|
|
65
|
+
targetValue: "1"
|
|
66
66
|
minReplicaCount: 1
|
|
67
|
-
maxReplicaCount:
|
|
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: "
|
|
132
|
+
jsonPath: "predicted_pods"
|
|
133
133
|
# Target value for scaling (calls per pod)
|
|
134
|
-
targetValue: "
|
|
134
|
+
targetValue: "1"
|
|
135
135
|
# HTTP method for API calls
|
|
136
136
|
httpMethod: "GET"
|
|
137
137
|
# Custom HTTP headers (optional)
|
{dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/src/dv_pipecat_ai.egg-info/SOURCES.txt
RENAMED
|
@@ -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
|
|
Binary file
|
|
@@ -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
|
|
Binary file
|
|
File without changes
|
{dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/1-bug_report.yml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/2-question.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/5-new-service.yml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/6-dependency.yml
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/ISSUE_TEMPLATE/config.yml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/PULL_REQUEST_TEMPLATE.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/promote-prod.yml
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/publish_test.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/set-traffic-split.yml
RENAMED
|
File without changes
|
{dv_pipecat_ai-0.0.82.dev776 → dv_pipecat_ai-0.0.82.dev807}/.github/workflows/sync-quickstart.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|