dv-pipecat-flows 0.0.22.dev1700__tar.gz → 0.0.22.dev1900__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.22.dev1700/src/dv_pipecat_flows.egg-info → dv_pipecat_flows-0.0.22.dev1900}/PKG-INFO +1 -1
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900/src/dv_pipecat_flows.egg-info}/PKG-INFO +1 -1
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/pipecat_flows/manager.py +10 -4
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/pipecat_flows/router_mode.py +11 -5
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/uv.lock +1185 -109
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/.agents/skills/loki-logs/SKILL.md +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/.agents/skills/loki-logs/query-reference.md +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/.claude/skills/loki-logs/SKILL.md +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/.claude/skills/loki-logs/query-reference.md +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/.gitattributes +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/.gitignore +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/.pre-commit-config.yaml +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/.python-version +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/.readthedocs.yaml +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/AGENTS.md +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/CHANGELOG.md +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/CLAUDE.md +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/CONTRIBUTING.md +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/LICENSE +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/MANIFEST.in +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/README.md +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/dev-requirements.txt +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/docker-compose.dev.yml +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/.eslintrc.json +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/.prettierrc +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/css/tailwind.css +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/examples/food_ordering.json +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/examples/movie_explorer.json +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/examples/patient_intake.json +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/examples/restaurant_reservation.json +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/examples/travel_planner.json +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/favicon.png +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/favicon.svg +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/index.html +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/editor/canvas.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/editor/editorState.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/editor/sidePanel.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/editor/toolbar.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/main.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/nodes/baseNode.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/nodes/endNode.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/nodes/flowNode.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/nodes/functionNode.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/nodes/index.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/nodes/mergeNode.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/nodes/startNode.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/types.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/utils/export.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/utils/helpers.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/utils/import.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/js/utils/validation.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/jsdoc.json +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/package-lock.json +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/package.json +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/postcss.config.cjs +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/public/favicon.png +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/public/favicon.svg +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/tailwind.config.cjs +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/vercel.json +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/editor/vite.config.js +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/engine_primitives_plan.md +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/env.example +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/images/food-ordering-flow.png +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/pipecat-flows.png +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/pipecat_upgrade.md +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/pyproject.toml +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/remote-asterisk-code/README.md +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/remote-asterisk-code/extensions.conf +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/remote-asterisk-code/rtp.conf +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/requirements.txt +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/scripts/check-pypi-package.py +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/scripts/fix-ruff.sh +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/scripts/pre-commit.sh +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/setup.cfg +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/dv_pipecat_flows.egg-info/SOURCES.txt +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/dv_pipecat_flows.egg-info/dependency_links.txt +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/dv_pipecat_flows.egg-info/requires.txt +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/dv_pipecat_flows.egg-info/top_level.txt +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/pipecat_flows/__init__.py +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/pipecat_flows/actions.py +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/pipecat_flows/adapters.py +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/pipecat_flows/condition_evaluator.py +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/pipecat_flows/exceptions.py +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/pipecat_flows/flow_validator.py +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/pipecat_flows/processors/__init__.py +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/pipecat_flows/processors/router_mode_guard.py +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/pipecat_flows/processors/speak_interruption_guard.py +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/pipecat_flows/processors/user_turn_observer.py +0 -0
- {dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/pipecat_flows/types.py +0 -0
{dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/pipecat_flows/manager.py
RENAMED
|
@@ -1023,7 +1023,13 @@ In all of these cases, you can provide a `name` in your new node's config for de
|
|
|
1023
1023
|
|
|
1024
1024
|
# Case 3: condition-router sentinel.
|
|
1025
1025
|
if auto_transition == "__condition__":
|
|
1026
|
-
|
|
1026
|
+
# Field name matches what the backend lowerer emits
|
|
1027
|
+
# (agent/commons/flow_lowering.py: `router_conditions`) and what
|
|
1028
|
+
# the bot's Pydantic Node round-trips. Reading the unprefixed
|
|
1029
|
+
# `conditions` returned None on every condition-router → all
|
|
1030
|
+
# rules silently skipped → fell through to `router_default_next`
|
|
1031
|
+
# regardless of which branch matched.
|
|
1032
|
+
conditions = node_config.get("router_conditions") or []
|
|
1027
1033
|
default_next = node_config.get("router_default_next")
|
|
1028
1034
|
tool_outputs = self.state.get("tool_outputs") or {}
|
|
1029
1035
|
return evaluate_conditions(
|
|
@@ -2380,15 +2386,15 @@ In all of these cases, you can provide a `name` in your new node's config for de
|
|
|
2380
2386
|
except (RouterParseError, RouterProviderError) as exc:
|
|
2381
2387
|
logger.error(
|
|
2382
2388
|
f"Router-mode LLM failed for node {node_id}: {exc!r}; "
|
|
2383
|
-
f"routing to
|
|
2389
|
+
f"routing to router_exhausted_next"
|
|
2384
2390
|
)
|
|
2385
|
-
router_target = node_config.get("
|
|
2391
|
+
router_target = node_config.get("router_exhausted_next")
|
|
2386
2392
|
if router_target:
|
|
2387
2393
|
await self._short_circuit_to(router_target)
|
|
2388
2394
|
else:
|
|
2389
2395
|
logger.error(
|
|
2390
2396
|
f"Router-mode node {node_id} returned no target and no "
|
|
2391
|
-
f"
|
|
2397
|
+
f"router_exhausted_next configured; staying on current node"
|
|
2392
2398
|
)
|
|
2393
2399
|
return
|
|
2394
2400
|
|
{dv_pipecat_flows-0.0.22.dev1700 → dv_pipecat_flows-0.0.22.dev1900}/src/pipecat_flows/router_mode.py
RENAMED
|
@@ -259,15 +259,21 @@ def pick_branch_target(
|
|
|
259
259
|
if branch_id == UNCLEAR_BRANCH_ID:
|
|
260
260
|
attempts = attempt_state.get(node_id, 0) + 1
|
|
261
261
|
attempt_state[node_id] = attempts
|
|
262
|
-
|
|
263
|
-
|
|
262
|
+
# NB: field names match what the backend lowerer emits (see
|
|
263
|
+
# agent/commons/flow_lowering.py — `router_unclear_next`,
|
|
264
|
+
# `router_exhausted_next`, `router_max_attempts`) and what the bot's
|
|
265
|
+
# Pydantic Node round-trips. The TypedDict in types.py still lists
|
|
266
|
+
# the legacy `_node` / `_max_unclear` names for historical reasons,
|
|
267
|
+
# but those keys never reach this dict at runtime.
|
|
268
|
+
max_attempts = int(node_config.get("router_max_attempts", 2))
|
|
269
|
+
if attempts > max_attempts:
|
|
264
270
|
attempt_state[node_id] = 0 # reset for next time we enter this node
|
|
265
|
-
return node_config.get("
|
|
271
|
+
return node_config.get("router_exhausted_next")
|
|
266
272
|
# Under cap: prefer the new inline re-prompt if configured, else fall
|
|
267
|
-
# back to the legacy separate-Speak
|
|
273
|
+
# back to the legacy separate-Speak unclear target.
|
|
268
274
|
if node_config.get("router_reprompt_message"):
|
|
269
275
|
return REPROMPT_IN_PLACE
|
|
270
|
-
return node_config.get("
|
|
276
|
+
return node_config.get("router_unclear_next")
|
|
271
277
|
|
|
272
278
|
return None # caller treats unknown id as a parse failure
|
|
273
279
|
|