dv-pipecat-flows 0.0.0.dev2786__tar.gz → 0.0.0.dev2810__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.
- {dv_pipecat_flows-0.0.0.dev2786/src/dv_pipecat_flows.egg-info → dv_pipecat_flows-0.0.0.dev2810}/PKG-INFO +1 -1
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810/src/dv_pipecat_flows.egg-info}/PKG-INFO +1 -1
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/dv_pipecat_flows.egg-info/scm_file_list.json +4 -0
- dv_pipecat_flows-0.0.0.dev2810/src/dv_pipecat_flows.egg-info/scm_version.json +8 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/manager.py +61 -21
- dv_pipecat_flows-0.0.0.dev2786/src/dv_pipecat_flows.egg-info/scm_version.json +0 -8
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/.agents/skills/loki-logs/SKILL.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/.agents/skills/loki-logs/query-reference.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/.claude/skills/loki-logs/SKILL.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/.claude/skills/loki-logs/query-reference.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/.gitattributes +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/.gitignore +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/.pre-commit-config.yaml +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/.python-version +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/.readthedocs.yaml +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/AGENTS.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/CHANGELOG.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/CLAUDE.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/CONTRIBUTING.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/LICENSE +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/MANIFEST.in +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/README.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/.env.example +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/.gitignore +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/README.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/docs/ARCHITECTURE.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/docs/CODE_MAP.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/docs/CONFIG.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/docs/CONTRACTS.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/docs/COPILOT_TODO.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/docs/DISTRIBUTION.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/docs/HLD.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/docs/METHODS.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/docs/VOICE_E2E.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/ANALYSIS_stagehand_vs_hybrid.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/RESULTS.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/_env.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/bench.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/bench_browseruse.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/bench_stagehand.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/inspect_browseruse.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/inspect_browseruse_showcase.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/inspect_stagehand_prompt.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/pages/checkout.html +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/pages/dashboard.html +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/pages/signup.html +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/results_browseruse.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/results_perception.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/results_stagehand.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/tasks.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/try_hybrid.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/try_hybrid_multistep.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/try_hybrid_oneshot.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/pyproject.toml +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/scripts/dev-stack.sh +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/uv.lock +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/dev-requirements.txt +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/docker-compose.dev.yml +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/.eslintrc.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/.prettierrc +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/css/tailwind.css +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/examples/food_ordering.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/examples/movie_explorer.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/examples/patient_intake.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/examples/restaurant_reservation.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/examples/travel_planner.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/favicon.png +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/favicon.svg +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/index.html +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/editor/canvas.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/editor/editorState.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/editor/sidePanel.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/editor/toolbar.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/main.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/nodes/baseNode.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/nodes/endNode.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/nodes/flowNode.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/nodes/functionNode.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/nodes/index.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/nodes/mergeNode.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/nodes/startNode.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/types.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/utils/export.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/utils/helpers.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/utils/import.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/utils/validation.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/jsdoc.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/package-lock.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/package.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/postcss.config.cjs +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/public/favicon.png +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/public/favicon.svg +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/tailwind.config.cjs +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/vercel.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/vite.config.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/engine_primitives_plan.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/env.example +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/images/food-ordering-flow.png +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/pipecat-flows.png +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/pipecat_upgrade.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/pyproject.toml +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/remote-asterisk-code/README.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/remote-asterisk-code/extensions.conf +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/remote-asterisk-code/rtp.conf +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/requirements.txt +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/scripts/azure_latency_probe.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/scripts/check-pypi-package.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/scripts/fix-ruff.sh +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/scripts/langfuse_export.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/scripts/pre-commit.sh +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/setup.cfg +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/dv_pipecat_flows.egg-info/SOURCES.txt +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/dv_pipecat_flows.egg-info/dependency_links.txt +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/dv_pipecat_flows.egg-info/requires.txt +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/dv_pipecat_flows.egg-info/top_level.txt +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/__init__.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/actions.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/adapters.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/condition_evaluator.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/exceptions.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/flow_validator.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/processors/__init__.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/processors/router_mode_guard.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/processors/speak_interruption_guard.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/processors/user_turn_observer.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/router_mode.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/types.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/uv.lock +0 -0
|
@@ -359,6 +359,7 @@
|
|
|
359
359
|
"ringg-bot/test_bot.py",
|
|
360
360
|
"ringg-bot/tests/__init__.py",
|
|
361
361
|
"ringg-bot/tests/conftest.py",
|
|
362
|
+
"ringg-bot/tests/test_abandoned_call_report.py",
|
|
362
363
|
"ringg-bot/tests/test_action_call_variables.py",
|
|
363
364
|
"ringg-bot/tests/test_app_metrics.py",
|
|
364
365
|
"ringg-bot/tests/test_artifact_store.py",
|
|
@@ -383,6 +384,7 @@
|
|
|
383
384
|
"ringg-bot/tests/test_end_call_schema.py",
|
|
384
385
|
"ringg-bot/tests/test_env_config_asterisk_ami.py",
|
|
385
386
|
"ringg-bot/tests/test_execute_plan.py",
|
|
387
|
+
"ringg-bot/tests/test_find_button_api_config.py",
|
|
386
388
|
"ringg-bot/tests/test_flow_query_kb.py",
|
|
387
389
|
"ringg-bot/tests/test_gcs_fetch.py",
|
|
388
390
|
"ringg-bot/tests/test_http_client_diagnostics.py",
|
|
@@ -554,6 +556,7 @@
|
|
|
554
556
|
"ringg-bot/utils/tts.py",
|
|
555
557
|
"ringg-bot/utils/twilio_async_client.py",
|
|
556
558
|
"ringg-bot/utils/warning_messages.py",
|
|
559
|
+
"ringg-bot/utils/widget_transcript.py",
|
|
557
560
|
"ringg-bot/utils/word_timestamp_logger.py",
|
|
558
561
|
"ringg-bot/voice_services/asterisk/asterisk_service.py",
|
|
559
562
|
"ringg-bot/voice_services/asterisk/router.py",
|
|
@@ -648,6 +651,7 @@
|
|
|
648
651
|
"tests/test_response_formatters.py",
|
|
649
652
|
"tests/test_router_extract_schema.py",
|
|
650
653
|
"tests/test_router_no_unclear.py",
|
|
654
|
+
"tests/test_router_wait_idle.py",
|
|
651
655
|
"tests/test_tts_split_cache.py",
|
|
652
656
|
"tests/test_voicemail_detector.py",
|
|
653
657
|
"uv.lock"
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/manager.py
RENAMED
|
@@ -1872,6 +1872,24 @@ In all of these cases, you can provide a `name` in your new node's config for de
|
|
|
1872
1872
|
label="jump",
|
|
1873
1873
|
)
|
|
1874
1874
|
|
|
1875
|
+
def _last_context_role(self) -> Optional[str]:
|
|
1876
|
+
"""Role of the last message in the live LLM context, or None when no
|
|
1877
|
+
context aggregator / empty context. Used by the router wait gate to
|
|
1878
|
+
tell a real committed user turn apart from system-generated context
|
|
1879
|
+
pushes (e.g. the idle warning's LLM-path append)."""
|
|
1880
|
+
if not self._context_aggregator:
|
|
1881
|
+
return None
|
|
1882
|
+
ctx = self._context_aggregator.user()._context
|
|
1883
|
+
messages = (
|
|
1884
|
+
ctx.get_messages() if hasattr(ctx, "get_messages") else getattr(ctx, "messages", [])
|
|
1885
|
+
)
|
|
1886
|
+
if not messages:
|
|
1887
|
+
return None
|
|
1888
|
+
last = messages[-1]
|
|
1889
|
+
if isinstance(last, dict):
|
|
1890
|
+
return last.get("role")
|
|
1891
|
+
return getattr(last, "role", None)
|
|
1892
|
+
|
|
1875
1893
|
async def _run_router_node(
|
|
1876
1894
|
self, node_id: str, node_config: Dict[str, Any]
|
|
1877
1895
|
) -> Optional[str]:
|
|
@@ -1905,10 +1923,19 @@ In all of these cases, you can provide a `name` in your new node's config for de
|
|
|
1905
1923
|
# `_run_router_node` captures a fresh entry_ts — the next iteration
|
|
1906
1924
|
# correctly waits for a NEW user reply instead of reclassifying the
|
|
1907
1925
|
# stale one that triggered the previous UNCLEAR.
|
|
1926
|
+
#
|
|
1927
|
+
# Silence handling is delegated to the user-idle processor: we re-arm
|
|
1928
|
+
# it for the duration of the wait (it was stopped at `_set_node`
|
|
1929
|
+
# entry) and block until the user actually replies. If they never do,
|
|
1930
|
+
# the idle processor's warning → end stages fire and end the call —
|
|
1931
|
+
# the router never classifies stale silence. The idle warning's
|
|
1932
|
+
# fixed-phrase TTSSpeakFrame passes RouterModeGuard; its LLM-path
|
|
1933
|
+
# fallback (realtime/chat-only/unsupported languages) is dropped by
|
|
1934
|
+
# the guard, so that warning is silent but the end stage still ends
|
|
1935
|
+
# the call.
|
|
1908
1936
|
observer = self._user_turn_observer
|
|
1909
1937
|
|
|
1910
|
-
|
|
1911
|
-
if observer is not None and timeout_s > 0:
|
|
1938
|
+
if observer is not None:
|
|
1912
1939
|
entry_ts = time.monotonic()
|
|
1913
1940
|
if observer.last_user_stopped_ts >= entry_ts:
|
|
1914
1941
|
logger.debug(
|
|
@@ -1929,28 +1956,41 @@ In all of these cases, you can provide a `name` in your new node's config for de
|
|
|
1929
1956
|
)
|
|
1930
1957
|
else:
|
|
1931
1958
|
logger.debug(
|
|
1932
|
-
f"Router '{node_id}': waiting
|
|
1933
|
-
f"UserStoppedSpeakingFrame"
|
|
1959
|
+
f"Router '{node_id}': waiting for "
|
|
1960
|
+
f"UserStoppedSpeakingFrame (idle processor armed)"
|
|
1934
1961
|
)
|
|
1962
|
+
await self._task.queue_frame(StartUserIdleProcessorFrame())
|
|
1935
1963
|
try:
|
|
1936
|
-
|
|
1937
|
-
observer.event.wait()
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1964
|
+
while True:
|
|
1965
|
+
await observer.event.wait()
|
|
1966
|
+
# The observer fires on EVERY OpenAILLMContextFrame,
|
|
1967
|
+
# and with idle armed there IS a competing source:
|
|
1968
|
+
# the idle warning's LLM path (chat-only sessions,
|
|
1969
|
+
# realtime LLMs) appends its prompt with
|
|
1970
|
+
# run_llm=True, which makes the user aggregator push
|
|
1971
|
+
# a context frame with NO new user turn. Accept the
|
|
1972
|
+
# wake only when the last context message is the
|
|
1973
|
+
# user's; otherwise keep waiting for the real reply
|
|
1974
|
+
# (or for idle end-stage to end the call).
|
|
1975
|
+
role = self._last_context_role()
|
|
1976
|
+
if role is None or role == "user":
|
|
1977
|
+
break
|
|
1978
|
+
logger.debug(
|
|
1979
|
+
f"Router '{node_id}': ignoring context push "
|
|
1980
|
+
f"with last role '{role}' (idle warning, not a "
|
|
1981
|
+
f"user reply); still waiting"
|
|
1982
|
+
)
|
|
1983
|
+
observer.event.clear()
|
|
1984
|
+
finally:
|
|
1985
|
+
# Restore the "idle stopped while the node is
|
|
1986
|
+
# processing" invariant for the classifier call.
|
|
1987
|
+
await self._task.queue_frame(
|
|
1988
|
+
StopUserIdleProcessorFrame()
|
|
1953
1989
|
)
|
|
1990
|
+
logger.debug(
|
|
1991
|
+
f"Router '{node_id}': user reply received after "
|
|
1992
|
+
f"{time.monotonic() - entry_ts:.2f}s"
|
|
1993
|
+
)
|
|
1954
1994
|
|
|
1955
1995
|
branches = node_config.get("router_branches") or []
|
|
1956
1996
|
extract = node_config.get("router_extract") or {}
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/.agents/skills/loki-logs/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/.claude/skills/loki-logs/SKILL.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/.env.example
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/.gitignore
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/docs/CODE_MAP.md
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/docs/CONFIG.md
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/docs/CONTRACTS.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/docs/HLD.md
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/docs/METHODS.md
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/docs/VOICE_E2E.md
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/RESULTS.md
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/_env.py
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/bench.py
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_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/tasks.py
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/eval/try_hybrid.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/browser_copilot/pyproject.toml
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
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/examples/food_ordering.json
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
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/editor/canvas.js
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/editor/editorState.js
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/editor/sidePanel.js
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/editor/toolbar.js
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/nodes/baseNode.js
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/nodes/endNode.js
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/nodes/flowNode.js
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/nodes/functionNode.js
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/nodes/mergeNode.js
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/nodes/startNode.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/utils/helpers.js
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/js/utils/validation.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/editor/tailwind.config.cjs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/images/food-ordering-flow.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/remote-asterisk-code/README.md
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/remote-asterisk-code/rtp.conf
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/scripts/azure_latency_probe.py
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/scripts/check-pypi-package.py
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/scripts/langfuse_export.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/__init__.py
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/actions.py
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/adapters.py
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/router_mode.py
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2786 → dv_pipecat_flows-0.0.0.dev2810}/src/pipecat_flows/types.py
RENAMED
|
File without changes
|
|
File without changes
|