dv-pipecat-flows 0.0.23.dev4__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.
Files changed (91) hide show
  1. {dv_pipecat_flows-0.0.23.dev4/src/dv_pipecat_flows.egg-info → dv_pipecat_flows-0.0.23.dev5}/PKG-INFO +1 -1
  2. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5/src/dv_pipecat_flows.egg-info}/PKG-INFO +1 -1
  3. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/actions.py +2 -2
  4. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/manager.py +31 -1
  5. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/.agents/skills/loki-logs/SKILL.md +0 -0
  6. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/.agents/skills/loki-logs/query-reference.md +0 -0
  7. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/.claude/skills/loki-logs/SKILL.md +0 -0
  8. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/.claude/skills/loki-logs/query-reference.md +0 -0
  9. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/.gitattributes +0 -0
  10. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/.gitignore +0 -0
  11. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/.pre-commit-config.yaml +0 -0
  12. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/.python-version +0 -0
  13. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/.readthedocs.yaml +0 -0
  14. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/AGENTS.md +0 -0
  15. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/CHANGELOG.md +0 -0
  16. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/CLAUDE.md +0 -0
  17. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/CONTRIBUTING.md +0 -0
  18. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/LICENSE +0 -0
  19. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/MANIFEST.in +0 -0
  20. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/README.md +0 -0
  21. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/dev-requirements.txt +0 -0
  22. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/docker-compose.dev.yml +0 -0
  23. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/.eslintrc.json +0 -0
  24. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/.prettierrc +0 -0
  25. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/css/tailwind.css +0 -0
  26. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/examples/food_ordering.json +0 -0
  27. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/examples/movie_explorer.json +0 -0
  28. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/examples/patient_intake.json +0 -0
  29. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/examples/restaurant_reservation.json +0 -0
  30. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/examples/travel_planner.json +0 -0
  31. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/favicon.png +0 -0
  32. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/favicon.svg +0 -0
  33. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/index.html +0 -0
  34. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/editor/canvas.js +0 -0
  35. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/editor/editorState.js +0 -0
  36. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/editor/sidePanel.js +0 -0
  37. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/editor/toolbar.js +0 -0
  38. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/main.js +0 -0
  39. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/nodes/baseNode.js +0 -0
  40. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/nodes/endNode.js +0 -0
  41. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/nodes/flowNode.js +0 -0
  42. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/nodes/functionNode.js +0 -0
  43. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/nodes/index.js +0 -0
  44. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/nodes/mergeNode.js +0 -0
  45. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/nodes/startNode.js +0 -0
  46. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/types.js +0 -0
  47. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/utils/export.js +0 -0
  48. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/utils/helpers.js +0 -0
  49. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/utils/import.js +0 -0
  50. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/js/utils/validation.js +0 -0
  51. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/jsdoc.json +0 -0
  52. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/package-lock.json +0 -0
  53. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/package.json +0 -0
  54. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/postcss.config.cjs +0 -0
  55. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/public/favicon.png +0 -0
  56. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/public/favicon.svg +0 -0
  57. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/tailwind.config.cjs +0 -0
  58. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/vercel.json +0 -0
  59. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/editor/vite.config.js +0 -0
  60. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/engine_primitives_plan.md +0 -0
  61. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/env.example +0 -0
  62. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/images/food-ordering-flow.png +0 -0
  63. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/pipecat-flows.png +0 -0
  64. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/pipecat_upgrade.md +0 -0
  65. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/pyproject.toml +0 -0
  66. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/remote-asterisk-code/README.md +0 -0
  67. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/remote-asterisk-code/extensions.conf +0 -0
  68. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/remote-asterisk-code/rtp.conf +0 -0
  69. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/requirements.txt +0 -0
  70. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/scripts/check-pypi-package.py +0 -0
  71. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/scripts/fix-ruff.sh +0 -0
  72. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/scripts/pre-commit.sh +0 -0
  73. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/setup.cfg +0 -0
  74. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/dv_pipecat_flows.egg-info/SOURCES.txt +0 -0
  75. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/dv_pipecat_flows.egg-info/dependency_links.txt +0 -0
  76. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/dv_pipecat_flows.egg-info/requires.txt +0 -0
  77. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/dv_pipecat_flows.egg-info/scm_file_list.json +0 -0
  78. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/dv_pipecat_flows.egg-info/scm_version.json +0 -0
  79. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/dv_pipecat_flows.egg-info/top_level.txt +0 -0
  80. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/__init__.py +0 -0
  81. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/adapters.py +0 -0
  82. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/condition_evaluator.py +0 -0
  83. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/exceptions.py +0 -0
  84. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/flow_validator.py +0 -0
  85. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/processors/__init__.py +0 -0
  86. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/processors/router_mode_guard.py +0 -0
  87. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/processors/speak_interruption_guard.py +0 -0
  88. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/processors/user_turn_observer.py +0 -0
  89. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/router_mode.py +0 -0
  90. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/src/pipecat_flows/types.py +0 -0
  91. {dv_pipecat_flows-0.0.23.dev4 → dv_pipecat_flows-0.0.23.dev5}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-flows
3
- Version: 0.0.23.dev4
3
+ Version: 0.0.23.dev5
4
4
  Summary: Conversation Flow management for Pipecat AI applications
5
5
  License: BSD 2-Clause License
6
6
  Project-URL: Source, https://github.com/pipecat-ai/pipecat-flows
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-flows
3
- Version: 0.0.23.dev4
3
+ Version: 0.0.23.dev5
4
4
  Summary: Conversation Flow management for Pipecat AI applications
5
5
  License: BSD 2-Clause License
6
6
  Project-URL: Source, https://github.com/pipecat-ai/pipecat-flows
@@ -73,7 +73,7 @@ _EXTRACT_VAR_RE = re.compile(
73
73
  )
74
74
 
75
75
 
76
- def _substitute_extract_vars(text: str, state: dict) -> str:
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 = _substitute_extract_vars(text, state)
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 (
@@ -4077,6 +4077,31 @@ In all of these cases, you can provide a `name` in your new node's config for de
4077
4077
  """Generate a conversation summary from a given context."""
4078
4078
  return await self._adapter.generate_summary(self._llm, summary_prompt, context)
4079
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
+
4080
4105
  async def _update_llm_context(
4081
4106
  self,
4082
4107
  role_messages: Optional[List[dict]],
@@ -4102,6 +4127,11 @@ In all of these cases, you can provide a `name` in your new node's config for de
4102
4127
  try:
4103
4128
  messages = []
4104
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
+
4105
4135
  # Add role messages if provided.
4106
4136
  # Note that these come before any possible summary message; some
4107
4137
  # LLMs only support a single system instruction, and the first role