dv-pipecat-flows 0.0.23.dev3__tar.gz → 0.0.23.dev5__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.23.dev3/src/dv_pipecat_flows.egg-info → dv_pipecat_flows-0.0.23.dev5}/PKG-INFO +1 -1
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5/src/dv_pipecat_flows.egg-info}/PKG-INFO +1 -1
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/actions.py +2 -2
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/manager.py +39 -3
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/.agents/skills/loki-logs/SKILL.md +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/.agents/skills/loki-logs/query-reference.md +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/.claude/skills/loki-logs/SKILL.md +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/.claude/skills/loki-logs/query-reference.md +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/.gitattributes +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/.gitignore +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/.pre-commit-config.yaml +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/.python-version +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/.readthedocs.yaml +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/AGENTS.md +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/CHANGELOG.md +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/CLAUDE.md +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/CONTRIBUTING.md +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/LICENSE +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/MANIFEST.in +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/README.md +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/dev-requirements.txt +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/docker-compose.dev.yml +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/.eslintrc.json +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/.prettierrc +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/css/tailwind.css +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/examples/food_ordering.json +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/examples/movie_explorer.json +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/examples/patient_intake.json +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/examples/restaurant_reservation.json +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/examples/travel_planner.json +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/favicon.png +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/favicon.svg +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/index.html +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/editor/canvas.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/editor/editorState.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/editor/sidePanel.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/editor/toolbar.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/main.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/nodes/baseNode.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/nodes/endNode.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/nodes/flowNode.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/nodes/functionNode.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/nodes/index.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/nodes/mergeNode.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/nodes/startNode.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/types.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/utils/export.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/utils/helpers.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/utils/import.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/utils/validation.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/jsdoc.json +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/package-lock.json +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/package.json +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/postcss.config.cjs +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/public/favicon.png +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/public/favicon.svg +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/tailwind.config.cjs +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/vercel.json +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/vite.config.js +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/engine_primitives_plan.md +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/env.example +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/images/food-ordering-flow.png +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/pipecat-flows.png +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/pipecat_upgrade.md +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/pyproject.toml +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/remote-asterisk-code/README.md +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/remote-asterisk-code/extensions.conf +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/remote-asterisk-code/rtp.conf +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/requirements.txt +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/scripts/check-pypi-package.py +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/scripts/fix-ruff.sh +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/scripts/pre-commit.sh +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/setup.cfg +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/dv_pipecat_flows.egg-info/SOURCES.txt +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/dv_pipecat_flows.egg-info/dependency_links.txt +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/dv_pipecat_flows.egg-info/requires.txt +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/dv_pipecat_flows.egg-info/scm_file_list.json +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/dv_pipecat_flows.egg-info/scm_version.json +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/dv_pipecat_flows.egg-info/top_level.txt +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/__init__.py +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/adapters.py +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/condition_evaluator.py +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/exceptions.py +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/flow_validator.py +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/processors/__init__.py +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/processors/router_mode_guard.py +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/processors/speak_interruption_guard.py +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/processors/user_turn_observer.py +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/router_mode.py +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/types.py +0 -0
- {dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/uv.lock +0 -0
|
@@ -73,7 +73,7 @@ _EXTRACT_VAR_RE = re.compile(
|
|
|
73
73
|
)
|
|
74
74
|
|
|
75
75
|
|
|
76
|
-
def
|
|
76
|
+
def substitute_extract_vars(text: str, state: dict) -> str:
|
|
77
77
|
"""Replace ``[{var}]`` / ``@[{var}]`` occurrences with ``state[var]``.
|
|
78
78
|
|
|
79
79
|
Supports dotted paths (``[{user.name}]``). Unknown variables (key not
|
|
@@ -483,7 +483,7 @@ class ActionManager:
|
|
|
483
483
|
# text_raw stays unrendered so the split-cache's prefix derivation
|
|
484
484
|
# remains stable across calls.
|
|
485
485
|
state = self._flow_manager.state if isinstance(self._flow_manager.state, dict) else {}
|
|
486
|
-
text =
|
|
486
|
+
text = substitute_extract_vars(text, state)
|
|
487
487
|
|
|
488
488
|
await self._maybe_switch_tts_service_for_action(action)
|
|
489
489
|
|
|
@@ -71,7 +71,7 @@ from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
|
|
|
71
71
|
from pipecat.services.llm_service import FunctionCallParams
|
|
72
72
|
from pipecat.transports.base_transport import BaseTransport
|
|
73
73
|
|
|
74
|
-
from pipecat_flows.actions import ActionError, ActionManager
|
|
74
|
+
from pipecat_flows.actions import ActionError, ActionManager, substitute_extract_vars
|
|
75
75
|
from pipecat_flows.adapters import create_adapter
|
|
76
76
|
from pipecat_flows.condition_evaluator import evaluate_conditions
|
|
77
77
|
from pipecat_flows.exceptions import (
|
|
@@ -832,9 +832,15 @@ class FlowManager:
|
|
|
832
832
|
)
|
|
833
833
|
else:
|
|
834
834
|
# Node function - defer to pipecat's default run_llm logic
|
|
835
|
-
# This waits for all parallel function calls to complete
|
|
835
|
+
# This waits for all parallel function calls to complete.
|
|
836
|
+
# A tool (e.g. a widget send) can opt out of the follow-up LLM
|
|
837
|
+
# completion by tagging its result with _suppress_followup_llm;
|
|
838
|
+
# pop it so the sentinel never leaks into the LLM context.
|
|
839
|
+
suppress_followup_llm = (
|
|
840
|
+
isinstance(result, dict) and result.pop("_suppress_followup_llm", False)
|
|
841
|
+
)
|
|
836
842
|
properties = FunctionCallResultProperties(
|
|
837
|
-
run_llm=None,
|
|
843
|
+
run_llm=False if suppress_followup_llm else None,
|
|
838
844
|
on_context_updated=None,
|
|
839
845
|
)
|
|
840
846
|
|
|
@@ -4071,6 +4077,31 @@ In all of these cases, you can provide a `name` in your new node's config for de
|
|
|
4071
4077
|
"""Generate a conversation summary from a given context."""
|
|
4072
4078
|
return await self._adapter.generate_summary(self._llm, summary_prompt, context)
|
|
4073
4079
|
|
|
4080
|
+
def _resolve_extract_tokens(
|
|
4081
|
+
self, messages: Optional[List[dict]]
|
|
4082
|
+
) -> Optional[List[dict]]:
|
|
4083
|
+
"""Substitute ``[{name}]`` extract tokens in message content from
|
|
4084
|
+
``self.state``.
|
|
4085
|
+
|
|
4086
|
+
Router/agent nodes write their extracted values into ``self.state`` at
|
|
4087
|
+
runtime; the backend lowerer only resolves compile-time vars
|
|
4088
|
+
(custom_args, api_responses), so a downstream node's role/task prompt
|
|
4089
|
+
that references an extracted value would otherwise reach the LLM as a
|
|
4090
|
+
literal ``[{name}]`` marker. Mirrors the Speak/tts_say pass in
|
|
4091
|
+
``actions.substitute_extract_vars``. Returns shallow copies so the
|
|
4092
|
+
source NodeConfig messages stay in token form for the next entry;
|
|
4093
|
+
unknown keys are left literal.
|
|
4094
|
+
"""
|
|
4095
|
+
if not messages:
|
|
4096
|
+
return messages
|
|
4097
|
+
resolved: List[dict] = []
|
|
4098
|
+
for message in messages:
|
|
4099
|
+
content = message.get("content") if isinstance(message, dict) else None
|
|
4100
|
+
if isinstance(content, str) and "[{" in content:
|
|
4101
|
+
message = {**message, "content": substitute_extract_vars(content, self.state)}
|
|
4102
|
+
resolved.append(message)
|
|
4103
|
+
return resolved
|
|
4104
|
+
|
|
4074
4105
|
async def _update_llm_context(
|
|
4075
4106
|
self,
|
|
4076
4107
|
role_messages: Optional[List[dict]],
|
|
@@ -4096,6 +4127,11 @@ In all of these cases, you can provide a `name` in your new node's config for de
|
|
|
4096
4127
|
try:
|
|
4097
4128
|
messages = []
|
|
4098
4129
|
|
|
4130
|
+
# Resolve runtime ``[{name}]`` extract tokens against self.state
|
|
4131
|
+
# before the prompts enter context (see _resolve_extract_tokens).
|
|
4132
|
+
role_messages = self._resolve_extract_tokens(role_messages)
|
|
4133
|
+
task_messages = self._resolve_extract_tokens(task_messages)
|
|
4134
|
+
|
|
4099
4135
|
# Add role messages if provided.
|
|
4100
4136
|
# Note that these come before any possible summary message; some
|
|
4101
4137
|
# LLMs only support a single system instruction, and the first role
|
{dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/.agents/skills/loki-logs/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/examples/food_ordering.json
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/examples/movie_explorer.json
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/examples/patient_intake.json
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/examples/travel_planner.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/editor/editorState.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.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/editor/js/nodes/functionNode.js
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
|
|
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.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/remote-asterisk-code/README.md
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/remote-asterisk-code/extensions.conf
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
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/exceptions.py
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/flow_validator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev3 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/router_mode.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|