dv-pipecat-flows 0.0.22.dev2500__tar.gz → 0.0.22.dev2700__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.dev2500/src/dv_pipecat_flows.egg-info → dv_pipecat_flows-0.0.22.dev2700}/PKG-INFO +1 -1
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700/src/dv_pipecat_flows.egg-info}/PKG-INFO +1 -1
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/pipecat_flows/manager.py +41 -66
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/uv.lock +109 -1185
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/.agents/skills/loki-logs/SKILL.md +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/.agents/skills/loki-logs/query-reference.md +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/.claude/skills/loki-logs/SKILL.md +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/.claude/skills/loki-logs/query-reference.md +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/.gitattributes +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/.gitignore +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/.pre-commit-config.yaml +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/.python-version +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/.readthedocs.yaml +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/AGENTS.md +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/CHANGELOG.md +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/CLAUDE.md +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/CONTRIBUTING.md +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/LICENSE +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/MANIFEST.in +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/README.md +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/dev-requirements.txt +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/docker-compose.dev.yml +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/.eslintrc.json +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/.prettierrc +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/css/tailwind.css +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/examples/food_ordering.json +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/examples/movie_explorer.json +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/examples/patient_intake.json +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/examples/restaurant_reservation.json +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/examples/travel_planner.json +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/favicon.png +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/favicon.svg +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/index.html +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/editor/canvas.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/editor/editorState.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/editor/sidePanel.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/editor/toolbar.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/main.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/nodes/baseNode.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/nodes/endNode.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/nodes/flowNode.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/nodes/functionNode.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/nodes/index.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/nodes/mergeNode.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/nodes/startNode.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/types.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/utils/export.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/utils/helpers.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/utils/import.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/js/utils/validation.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/jsdoc.json +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/package-lock.json +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/package.json +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/postcss.config.cjs +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/public/favicon.png +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/public/favicon.svg +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/tailwind.config.cjs +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/vercel.json +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/editor/vite.config.js +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/engine_primitives_plan.md +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/env.example +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/images/food-ordering-flow.png +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/pipecat-flows.png +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/pipecat_upgrade.md +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/pyproject.toml +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/remote-asterisk-code/README.md +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/remote-asterisk-code/extensions.conf +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/remote-asterisk-code/rtp.conf +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/requirements.txt +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/scripts/check-pypi-package.py +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/scripts/fix-ruff.sh +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/scripts/pre-commit.sh +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/setup.cfg +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/dv_pipecat_flows.egg-info/SOURCES.txt +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/dv_pipecat_flows.egg-info/dependency_links.txt +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/dv_pipecat_flows.egg-info/requires.txt +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/dv_pipecat_flows.egg-info/top_level.txt +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/pipecat_flows/__init__.py +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/pipecat_flows/actions.py +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/pipecat_flows/adapters.py +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/pipecat_flows/condition_evaluator.py +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/pipecat_flows/exceptions.py +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/pipecat_flows/flow_validator.py +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/pipecat_flows/processors/__init__.py +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/pipecat_flows/processors/router_mode_guard.py +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/pipecat_flows/processors/speak_interruption_guard.py +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/pipecat_flows/processors/user_turn_observer.py +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/pipecat_flows/router_mode.py +0 -0
- {dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/pipecat_flows/types.py +0 -0
{dv_pipecat_flows-0.0.22.dev2500 → dv_pipecat_flows-0.0.22.dev2700}/src/pipecat_flows/manager.py
RENAMED
|
@@ -2234,69 +2234,22 @@ In all of these cases, you can provide a `name` in your new node's config for de
|
|
|
2234
2234
|
previous_node_id = self._current_node
|
|
2235
2235
|
router_pick = self._last_router_pick
|
|
2236
2236
|
self._last_router_pick = None
|
|
2237
|
-
# In v2 deterministic lowering, ``FlowConfig.nodes`` is keyed by
|
|
2238
|
-
# ``node.name`` (see calling/flow_builder_v2.py:214), and
|
|
2239
|
-
# ``self._current_node`` stores that same dict key — so
|
|
2240
|
-
# ``previous_node_id`` IS the previous node's name. No lookup
|
|
2241
|
-
# against ``self._nodes`` needed. Backend's
|
|
2242
|
-
# ``tools/helper.py:build_tool_call_log_response`` matches these
|
|
2243
|
-
# against ``AgentVersionNode.name → label`` to populate
|
|
2244
|
-
# source_node_label / target_node_label for the FE pill.
|
|
2245
2237
|
transition_tool_name = f"transition_to_{node_id}"
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
transition_args: Dict[str, Any] = {
|
|
2262
|
-
"from_node_id": previous_node_id,
|
|
2263
|
-
"to_node_id": node_id,
|
|
2264
|
-
# FE pill key aliases consumed by CallTranscriptViewer.
|
|
2265
|
-
"source_node": previous_node_id,
|
|
2266
|
-
"target_node": node_id,
|
|
2267
|
-
}
|
|
2268
|
-
if router_pick:
|
|
2269
|
-
transition_args.update(router_pick)
|
|
2270
|
-
logger.info(
|
|
2271
|
-
f"[node_transition] from={previous_node_id} to={node_id} "
|
|
2272
|
-
f"router_pick={router_pick}"
|
|
2273
|
-
)
|
|
2274
|
-
transition_call_id = await start_tracking(
|
|
2275
|
-
transcript_handler=getattr(self, "_transcript_handler", None),
|
|
2276
|
-
tool_name=transition_tool_name,
|
|
2277
|
-
args=transition_args,
|
|
2278
|
-
tool_phase="on_call",
|
|
2279
|
-
# `node_transition` matches the FE's filter in
|
|
2280
|
-
# components/call-details/CallTranscriptViewer.tsx so this
|
|
2281
|
-
# renders as a NodeTransitionDivider pill rather than a
|
|
2282
|
-
# generic tool pill.
|
|
2283
|
-
tool_type="node_transition",
|
|
2284
|
-
current_node=previous_node_id,
|
|
2285
|
-
logger=logger,
|
|
2286
|
-
)
|
|
2287
|
-
# Atomic completion right after start — see comment above.
|
|
2288
|
-
await complete_tracking(
|
|
2289
|
-
transcript_handler=getattr(self, "_transcript_handler", None),
|
|
2290
|
-
function_call_id=transition_call_id,
|
|
2291
|
-
tool_name=transition_tool_name,
|
|
2292
|
-
function_start_time=transition_start_time,
|
|
2293
|
-
response_data={
|
|
2294
|
-
"to_node_id": node_id,
|
|
2295
|
-
"from_node_id": previous_node_id,
|
|
2296
|
-
},
|
|
2297
|
-
status_code=200,
|
|
2298
|
-
logger=logger,
|
|
2299
|
-
)
|
|
2238
|
+
transition_args: Dict[str, Any] = {
|
|
2239
|
+
"from_node_id": previous_node_id,
|
|
2240
|
+
"to_node_id": node_id,
|
|
2241
|
+
}
|
|
2242
|
+
if router_pick:
|
|
2243
|
+
transition_args.update(router_pick)
|
|
2244
|
+
transition_call_id = await start_tracking(
|
|
2245
|
+
transcript_handler=getattr(self, "_transcript_handler", None),
|
|
2246
|
+
tool_name=transition_tool_name,
|
|
2247
|
+
args=transition_args,
|
|
2248
|
+
tool_phase="on_call",
|
|
2249
|
+
tool_type="transition",
|
|
2250
|
+
current_node=previous_node_id,
|
|
2251
|
+
logger=logger,
|
|
2252
|
+
)
|
|
2300
2253
|
|
|
2301
2254
|
try:
|
|
2302
2255
|
# Clear any pending transition state when starting a new node
|
|
@@ -2790,10 +2743,19 @@ In all of these cases, you can provide a `name` in your new node's config for de
|
|
|
2790
2743
|
|
|
2791
2744
|
# node_entered observer is now emitted at the *top* of _set_node
|
|
2792
2745
|
# so short-circuit paths (auto_transition / router-mode) get it too.
|
|
2793
|
-
|
|
2794
|
-
|
|
2795
|
-
|
|
2796
|
-
|
|
2746
|
+
|
|
2747
|
+
await complete_tracking(
|
|
2748
|
+
transcript_handler=getattr(self, "_transcript_handler", None),
|
|
2749
|
+
function_call_id=transition_call_id,
|
|
2750
|
+
tool_name=transition_tool_name,
|
|
2751
|
+
function_start_time=transition_start_time,
|
|
2752
|
+
response_data={
|
|
2753
|
+
"to_node_id": node_id,
|
|
2754
|
+
"to_node_label": node_config.get("label"),
|
|
2755
|
+
},
|
|
2756
|
+
status_code=200,
|
|
2757
|
+
logger=logger,
|
|
2758
|
+
)
|
|
2797
2759
|
|
|
2798
2760
|
except Exception as e:
|
|
2799
2761
|
# If setup crashed inside an uninterruptible node, the guard is
|
|
@@ -2805,6 +2767,19 @@ In all of these cases, you can provide a `name` in your new node's config for de
|
|
|
2805
2767
|
except Exception:
|
|
2806
2768
|
pass
|
|
2807
2769
|
logger.error(f"Error setting node {node_id}: {str(e)}")
|
|
2770
|
+
try:
|
|
2771
|
+
await complete_tracking(
|
|
2772
|
+
transcript_handler=getattr(self, "_transcript_handler", None),
|
|
2773
|
+
function_call_id=transition_call_id,
|
|
2774
|
+
tool_name=transition_tool_name,
|
|
2775
|
+
function_start_time=transition_start_time,
|
|
2776
|
+
response_data=None,
|
|
2777
|
+
status_code=500,
|
|
2778
|
+
error_details={"error": str(e), "type": type(e).__name__},
|
|
2779
|
+
logger=logger,
|
|
2780
|
+
)
|
|
2781
|
+
except Exception as track_exc:
|
|
2782
|
+
logger.warning(f"complete_tracking failed for {transition_tool_name}: {track_exc!r}")
|
|
2808
2783
|
raise FlowError(f"Failed to set node {node_id}: {str(e)}") from e
|
|
2809
2784
|
|
|
2810
2785
|
def _schedule_deferred_post_actions(self, post_actions: List[ActionConfig]) -> None:
|