dv-pipecat-flows 0.0.0.dev2764__tar.gz → 0.0.0.dev2786__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.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/AGENTS.md +17 -0
- {dv_pipecat_flows-0.0.0.dev2764/src/dv_pipecat_flows.egg-info → dv_pipecat_flows-0.0.0.dev2786}/PKG-INFO +1 -1
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786/src/dv_pipecat_flows.egg-info}/PKG-INFO +1 -1
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/dv_pipecat_flows.egg-info/scm_file_list.json +8 -1
- dv_pipecat_flows-0.0.0.dev2786/src/dv_pipecat_flows.egg-info/scm_version.json +8 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/processors/router_mode_guard.py +0 -11
- dv_pipecat_flows-0.0.0.dev2764/src/dv_pipecat_flows.egg-info/scm_version.json +0 -8
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/.agents/skills/loki-logs/SKILL.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/.agents/skills/loki-logs/query-reference.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/.claude/skills/loki-logs/SKILL.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/.claude/skills/loki-logs/query-reference.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/.gitattributes +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/.gitignore +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/.pre-commit-config.yaml +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/.python-version +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/.readthedocs.yaml +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/CHANGELOG.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/CLAUDE.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/CONTRIBUTING.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/LICENSE +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/MANIFEST.in +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/README.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/.env.example +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/.gitignore +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/README.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/docs/ARCHITECTURE.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/docs/CODE_MAP.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/docs/CONFIG.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/docs/CONTRACTS.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/docs/COPILOT_TODO.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/docs/DISTRIBUTION.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/docs/HLD.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/docs/METHODS.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/docs/VOICE_E2E.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/ANALYSIS_stagehand_vs_hybrid.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/RESULTS.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/_env.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/bench.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/bench_browseruse.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/bench_stagehand.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/inspect_browseruse.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/inspect_browseruse_showcase.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/inspect_stagehand_prompt.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/pages/checkout.html +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/pages/dashboard.html +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/pages/signup.html +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/results_browseruse.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/results_perception.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/results_stagehand.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/tasks.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/try_hybrid.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/try_hybrid_multistep.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/try_hybrid_oneshot.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/pyproject.toml +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/scripts/dev-stack.sh +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/uv.lock +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/dev-requirements.txt +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/docker-compose.dev.yml +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/.eslintrc.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/.prettierrc +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/css/tailwind.css +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/examples/food_ordering.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/examples/movie_explorer.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/examples/patient_intake.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/examples/restaurant_reservation.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/examples/travel_planner.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/favicon.png +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/favicon.svg +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/index.html +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/editor/canvas.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/editor/editorState.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/editor/sidePanel.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/editor/toolbar.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/main.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/nodes/baseNode.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/nodes/endNode.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/nodes/flowNode.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/nodes/functionNode.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/nodes/index.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/nodes/mergeNode.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/nodes/startNode.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/types.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/utils/export.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/utils/helpers.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/utils/import.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/utils/validation.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/jsdoc.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/package-lock.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/package.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/postcss.config.cjs +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/public/favicon.png +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/public/favicon.svg +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/tailwind.config.cjs +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/vercel.json +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/vite.config.js +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/engine_primitives_plan.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/env.example +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/images/food-ordering-flow.png +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/pipecat-flows.png +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/pipecat_upgrade.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/pyproject.toml +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/remote-asterisk-code/README.md +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/remote-asterisk-code/extensions.conf +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/remote-asterisk-code/rtp.conf +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/requirements.txt +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/scripts/azure_latency_probe.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/scripts/check-pypi-package.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/scripts/fix-ruff.sh +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/scripts/langfuse_export.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/scripts/pre-commit.sh +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/setup.cfg +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/dv_pipecat_flows.egg-info/SOURCES.txt +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/dv_pipecat_flows.egg-info/dependency_links.txt +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/dv_pipecat_flows.egg-info/requires.txt +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/dv_pipecat_flows.egg-info/top_level.txt +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/__init__.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/actions.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/adapters.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/condition_evaluator.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/exceptions.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/flow_validator.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/manager.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/processors/__init__.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/processors/speak_interruption_guard.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/processors/user_turn_observer.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/router_mode.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/types.py +0 -0
- {dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/uv.lock +0 -0
|
@@ -125,6 +125,23 @@ Example `call_config`:
|
|
|
125
125
|
- `tests/test_manager.py`, `tests/test_actions.py`, etc., cover FlowManager and ActionManager edge cases (context resets, action ordering, function registration). Extend these tests when adding new features.
|
|
126
126
|
- Logging: see the dedicated section below for Loguru usage and the custom logger configuration.
|
|
127
127
|
|
|
128
|
+
## Metrics & Observability
|
|
129
|
+
|
|
130
|
+
- **SDK**: `ringg-telemetry` (metrics-only facade over OpenTelemetry). Initialised once per process in the FastAPI lifespan — `ringg-bot/server.py` — gated on `ENABLE_METRICS`. Export path is OTLP/gRPC → the in-cluster `otel-gateway` → **Google Managed Prometheus**. Tracing is a *separate* stack (Langfuse, `ringg-bot/utils/tracing.py`); the two are unrelated.
|
|
131
|
+
- **Declare instruments in one place**: the registry block near the bottom of `ringg-bot/utils/metrics_collector.py`. Module-level handles (`ringg_metrics.histogram/counter/gauge`), created at import, resolved lazily. Keep the cardinality justification in a comment next to each — the `labels=(...)` tuple is a hard allowlist, and the SDK **silently drops** any label not in it.
|
|
132
|
+
- **Record from a lazily-importing, swallow-all helper** when the call site is on a per-turn hot path — see `_record_redis_latency` in `ringg-bot/ringg_processors/llm_cache.py` and `_record_router_metrics` in `ringg-bot/utils/language_detection.py`. Telemetry must never raise into a live call, and the import must not drag the metrics stack into eval scripts.
|
|
133
|
+
- **Names**: the SDK prefixes everything with `ringg.` and GMP rewrites it for PromQL — `ringg.language.router.duration` + `unit="s"` becomes `ringg_language_router_duration_seconds_{bucket,count,sum}`; a counter with `unit="1"` becomes `..._total`. A non-standard unit gets appended as a suffix, so use `"1"` even for money (put "USD" in the description).
|
|
134
|
+
- **Dashboards as code**: `k8s/monitoring/dashboards/` — one JSON per dashboard plus a README with the `gcloud monitoring dashboards create/update` commands and the assigned resource ids.
|
|
135
|
+
- **Tests**: `ringg_telemetry.testing.install_test_provider()` / `uninstall_test_provider()` route handles to an in-memory reader. See `ringg-bot/tests/test_metrics_bridge.py` and `tests/test_language_router_metrics.py`.
|
|
136
|
+
|
|
137
|
+
## Data Residency
|
|
138
|
+
|
|
139
|
+
- Some regions forbid their call data leaving regional storage. The single definition of that rule is `is_data_residency_restricted(region)` in `ringg-bot/utils/artifact_store.py` (currently `{"ksa"}`). **Consult it before any new write to the long-lived artifact bucket** — `RUNTIME_CONFIG_BUCKET` is US-located.
|
|
140
|
+
- Restricted regions **skip** the write entirely: there is no fallback bucket and no re-routing. Applies to the runtime-config snapshot, the tool-call snapshot and the language-router samples (`utils/generic_functions/cleanup.py`, `utils/language_sample_store.py`). The data still reaches the region's own backend via the `call_completion` POST, and transcripts/recordings still go to the regional bucket via `utils/transcript._get_gcs_bucket`.
|
|
141
|
+
- `region` is a **per-call** value (`RunConfig.region`, set by the backend), not a pod env var. On the two artifact uploaders it is keyword-only and *required* precisely so a new call site cannot become a violation by omission.
|
|
142
|
+
- Skipping the upload must not skip local cleanup: `LOCAL_STORAGE_DIR` is the pod's `/tmp` and the pod outlives thousands of calls, so anything buffered on disk still has to be unlinked on the skip path.
|
|
143
|
+
- Where feasible, gate at *capture* time too, not just upload time — e.g. `bot.py` passes `collect_samples=not is_data_residency_restricted(_region)` so raw user utterances are never written to `/tmp` for a restricted call.
|
|
144
|
+
|
|
128
145
|
## Logging
|
|
129
146
|
|
|
130
147
|
- We use Loguru for all application logging. Do not use the Python `logging` module in app code; always `from loguru import logger`.
|
|
@@ -211,6 +211,8 @@
|
|
|
211
211
|
"k8s/livekit/values-prod.yaml",
|
|
212
212
|
"k8s/livekit/values-stage.yaml",
|
|
213
213
|
"k8s/livekit/values.yaml",
|
|
214
|
+
"k8s/monitoring/dashboards/README.md",
|
|
215
|
+
"k8s/monitoring/dashboards/ringg-language-router.json",
|
|
214
216
|
"pipecat-flows.png",
|
|
215
217
|
"pipecat_upgrade.md",
|
|
216
218
|
"pyproject.toml",
|
|
@@ -359,6 +361,7 @@
|
|
|
359
361
|
"ringg-bot/tests/conftest.py",
|
|
360
362
|
"ringg-bot/tests/test_action_call_variables.py",
|
|
361
363
|
"ringg-bot/tests/test_app_metrics.py",
|
|
364
|
+
"ringg-bot/tests/test_artifact_store.py",
|
|
362
365
|
"ringg-bot/tests/test_asterisk_ami_client.py",
|
|
363
366
|
"ringg-bot/tests/test_asterisk_ari_transfer_message.py",
|
|
364
367
|
"ringg-bot/tests/test_asterisk_v1_transfer_numbers.py",
|
|
@@ -391,6 +394,7 @@
|
|
|
391
394
|
"ringg-bot/tests/test_job_reporting.py",
|
|
392
395
|
"ringg-bot/tests/test_kb_planner.py",
|
|
393
396
|
"ringg-bot/tests/test_language_map.py",
|
|
397
|
+
"ringg-bot/tests/test_language_router_metrics.py",
|
|
394
398
|
"ringg-bot/tests/test_language_sample_store.py",
|
|
395
399
|
"ringg-bot/tests/test_language_steering.py",
|
|
396
400
|
"ringg-bot/tests/test_llm_cache.py",
|
|
@@ -410,12 +414,15 @@
|
|
|
410
414
|
"ringg-bot/tests/test_on_call_sdk_context.py",
|
|
411
415
|
"ringg-bot/tests/test_ozonetel_inbound.py",
|
|
412
416
|
"ringg-bot/tests/test_ozonetel_transfer.py",
|
|
417
|
+
"ringg-bot/tests/test_rag_filter_operators.py",
|
|
418
|
+
"ringg-bot/tests/test_rag_filter_property_names.py",
|
|
413
419
|
"ringg-bot/tests/test_realtime_external_tts.py",
|
|
414
420
|
"ringg-bot/tests/test_recording_flush.py",
|
|
415
421
|
"ringg-bot/tests/test_recording_stereo.py",
|
|
416
422
|
"ringg-bot/tests/test_regression_monitor_sync.py",
|
|
417
423
|
"ringg-bot/tests/test_replay_kb_flag.py",
|
|
418
424
|
"ringg-bot/tests/test_runtime_config_language_normalization.py",
|
|
425
|
+
"ringg-bot/tests/test_runtime_config_upload.py",
|
|
419
426
|
"ringg-bot/tests/test_sdk_executor_flatten.py",
|
|
420
427
|
"ringg-bot/tests/test_sdk_tool_schema.py",
|
|
421
428
|
"ringg-bot/tests/test_send_blocks_calendar.py",
|
|
@@ -625,6 +632,7 @@
|
|
|
625
632
|
"tests/test_condition_evaluator.py",
|
|
626
633
|
"tests/test_context_strategies.py",
|
|
627
634
|
"tests/test_credentials_resolver.py",
|
|
635
|
+
"tests/test_deployment_scaling_chart.py",
|
|
628
636
|
"tests/test_end_call_inactivity.py",
|
|
629
637
|
"tests/test_end_call_interruptible.py",
|
|
630
638
|
"tests/test_end_call_provider_dispatch.py",
|
|
@@ -639,7 +647,6 @@
|
|
|
639
647
|
"tests/test_openai_realtime_transcript_filter.py",
|
|
640
648
|
"tests/test_response_formatters.py",
|
|
641
649
|
"tests/test_router_extract_schema.py",
|
|
642
|
-
"tests/test_router_mode_guard.py",
|
|
643
650
|
"tests/test_router_no_unclear.py",
|
|
644
651
|
"tests/test_tts_split_cache.py",
|
|
645
652
|
"tests/test_voicemail_detector.py",
|
|
@@ -48,7 +48,6 @@ from typing import Callable, Tuple, Type
|
|
|
48
48
|
|
|
49
49
|
from pipecat.frames.frames import (
|
|
50
50
|
Frame,
|
|
51
|
-
LLMContextFrame,
|
|
52
51
|
LLMMessagesFrame,
|
|
53
52
|
LLMRunFrame,
|
|
54
53
|
LLMTextFrame,
|
|
@@ -64,16 +63,6 @@ logger = logging.getLogger(__name__)
|
|
|
64
63
|
# race-free fix for the spurious-bot-text problem.
|
|
65
64
|
_TRIGGER_FRAME_TYPES: Tuple[Type[Frame], ...] = (
|
|
66
65
|
OpenAILLMContextFrame,
|
|
67
|
-
# Universal context frame. `LLMContextFrame` and `OpenAILLMContextFrame` are
|
|
68
|
-
# SIBLINGS (both extend Frame directly), so matching one does NOT match the
|
|
69
|
-
# other — both must be listed. The pipeline picks between them from a single
|
|
70
|
-
# switch in the bot: `context = LLMContext() if (_use_responses or
|
|
71
|
-
# _use_universal_for_google) else OpenAILLMContext()`. Omitting this one let
|
|
72
|
-
# the LLM fire during router-mode nodes on every Responses-API agent
|
|
73
|
-
# (gpt-5.4-mini/nano are forced onto Responses regardless of the
|
|
74
|
-
# `use_responses_api` toggle) and every google/gemma agent — the bot spoke
|
|
75
|
-
# spurious freeform text instead of routing silently.
|
|
76
|
-
LLMContextFrame,
|
|
77
66
|
LLMMessagesFrame,
|
|
78
67
|
LLMRunFrame,
|
|
79
68
|
)
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/.agents/skills/loki-logs/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/.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
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/.env.example
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/.gitignore
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/docs/CODE_MAP.md
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/docs/CONFIG.md
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/docs/CONTRACTS.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/docs/HLD.md
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/docs/METHODS.md
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/docs/VOICE_E2E.md
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/RESULTS.md
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/_env.py
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/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.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/tasks.py
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/browser_copilot/eval/try_hybrid.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/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.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/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.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/editor/canvas.js
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/editor/editorState.js
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/editor/sidePanel.js
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/editor/toolbar.js
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/nodes/baseNode.js
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/nodes/endNode.js
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/nodes/flowNode.js
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/nodes/functionNode.js
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/nodes/mergeNode.js
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/nodes/startNode.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/editor/js/utils/helpers.js
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/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.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/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.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/images/food-ordering-flow.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/remote-asterisk-code/README.md
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/remote-asterisk-code/rtp.conf
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/scripts/azure_latency_probe.py
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/scripts/check-pypi-package.py
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/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.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/__init__.py
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/actions.py
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/adapters.py
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/router_mode.py
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.0.dev2764 → dv_pipecat_flows-0.0.0.dev2786}/src/pipecat_flows/types.py
RENAMED
|
File without changes
|
|
File without changes
|