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