dv-pipecat-flows 0.0.22.dev918__tar.gz → 0.0.22.dev1116__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 (80) hide show
  1. {dv_pipecat_flows-0.0.22.dev918/src/dv_pipecat_flows.egg-info → dv_pipecat_flows-0.0.22.dev1116}/PKG-INFO +1 -1
  2. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116/src/dv_pipecat_flows.egg-info}/PKG-INFO +1 -1
  3. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/src/pipecat_flows/adapters.py +6 -0
  4. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/src/pipecat_flows/manager.py +21 -0
  5. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/uv.lock +277 -1149
  6. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/.claude/skills/loki-logs/SKILL.md +0 -0
  7. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/.claude/skills/loki-logs/query-reference.md +0 -0
  8. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/.gitattributes +0 -0
  9. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/.gitignore +0 -0
  10. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/.pre-commit-config.yaml +0 -0
  11. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/.python-version +0 -0
  12. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/.readthedocs.yaml +0 -0
  13. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/AGENTS.md +0 -0
  14. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/CHANGELOG.md +0 -0
  15. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/CLAUDE.md +0 -0
  16. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/CONTRIBUTING.md +0 -0
  17. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/LICENSE +0 -0
  18. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/MANIFEST.in +0 -0
  19. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/README.md +0 -0
  20. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/dev-requirements.txt +0 -0
  21. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/docker-compose.dev.yml +0 -0
  22. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/.eslintrc.json +0 -0
  23. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/.prettierrc +0 -0
  24. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/css/tailwind.css +0 -0
  25. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/examples/food_ordering.json +0 -0
  26. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/examples/movie_explorer.json +0 -0
  27. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/examples/patient_intake.json +0 -0
  28. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/examples/restaurant_reservation.json +0 -0
  29. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/examples/travel_planner.json +0 -0
  30. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/favicon.png +0 -0
  31. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/favicon.svg +0 -0
  32. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/index.html +0 -0
  33. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/editor/canvas.js +0 -0
  34. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/editor/editorState.js +0 -0
  35. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/editor/sidePanel.js +0 -0
  36. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/editor/toolbar.js +0 -0
  37. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/main.js +0 -0
  38. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/nodes/baseNode.js +0 -0
  39. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/nodes/endNode.js +0 -0
  40. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/nodes/flowNode.js +0 -0
  41. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/nodes/functionNode.js +0 -0
  42. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/nodes/index.js +0 -0
  43. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/nodes/mergeNode.js +0 -0
  44. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/nodes/startNode.js +0 -0
  45. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/types.js +0 -0
  46. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/utils/export.js +0 -0
  47. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/utils/helpers.js +0 -0
  48. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/utils/import.js +0 -0
  49. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/js/utils/validation.js +0 -0
  50. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/jsdoc.json +0 -0
  51. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/package-lock.json +0 -0
  52. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/package.json +0 -0
  53. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/postcss.config.cjs +0 -0
  54. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/public/favicon.png +0 -0
  55. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/public/favicon.svg +0 -0
  56. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/tailwind.config.cjs +0 -0
  57. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/vercel.json +0 -0
  58. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/editor/vite.config.js +0 -0
  59. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/env.example +0 -0
  60. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/images/food-ordering-flow.png +0 -0
  61. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/pipecat-flows.png +0 -0
  62. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/pipecat_upgrade.md +0 -0
  63. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/pyproject.toml +0 -0
  64. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/remote-asterisk-code/README.md +0 -0
  65. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/remote-asterisk-code/extensions.conf +0 -0
  66. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/remote-asterisk-code/rtp.conf +0 -0
  67. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/requirements.txt +0 -0
  68. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/scripts/check-pypi-package.py +0 -0
  69. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/scripts/fix-ruff.sh +0 -0
  70. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/scripts/pre-commit.sh +0 -0
  71. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/setup.cfg +0 -0
  72. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/src/dv_pipecat_flows.egg-info/SOURCES.txt +0 -0
  73. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/src/dv_pipecat_flows.egg-info/dependency_links.txt +0 -0
  74. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/src/dv_pipecat_flows.egg-info/requires.txt +0 -0
  75. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/src/dv_pipecat_flows.egg-info/top_level.txt +0 -0
  76. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/src/pipecat_flows/__init__.py +0 -0
  77. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/src/pipecat_flows/actions.py +0 -0
  78. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/src/pipecat_flows/data_extractor.py +0 -0
  79. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/src/pipecat_flows/exceptions.py +0 -0
  80. {dv_pipecat_flows-0.0.22.dev918 → dv_pipecat_flows-0.0.22.dev1116}/src/pipecat_flows/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-flows
3
- Version: 0.0.22.dev918
3
+ Version: 0.0.22.dev1116
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.22.dev918
3
+ Version: 0.0.22.dev1116
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
@@ -672,6 +672,12 @@ def create_adapter(llm, context_aggregator) -> LLMAdapter:
672
672
  llm_type = type(llm).__name__
673
673
  llm_class = type(llm)
674
674
 
675
+ if llm_type == "OpenAIResponsesLLMService":
676
+ # Responses API service uses universal LLMContext — should have been caught
677
+ # by the LLMContextAggregatorPair check above, but handle explicitly as a fallback
678
+ logger.debug("Creating universal adapter for OpenAI Responses API service")
679
+ return UniversalLLMAdapter()
680
+
675
681
  if llm_type == "OpenAILLMService":
676
682
  logger.debug("Creating OpenAI adapter")
677
683
  return OpenAIAdapter()
@@ -1135,12 +1135,23 @@ In all of these cases, you can provide a `name` in your new node's config for de
1135
1135
  standard_functions, original_configs=functions_list
1136
1136
  )
1137
1137
 
1138
+ # Collect mirror_context messages from tts_say pre-actions
1139
+ mirror_messages = []
1140
+ for action in node_config.get("pre_actions", []):
1141
+ if (
1142
+ action.get("type") == "tts_say"
1143
+ and action.get("mirror_context", True)
1144
+ and action.get("text")
1145
+ ):
1146
+ mirror_messages.append({"role": "assistant", "content": action["text"]})
1147
+
1138
1148
  # Update LLM context
1139
1149
  await self._update_llm_context(
1140
1150
  role_messages=node_config.get("role_messages"),
1141
1151
  task_messages=node_config["task_messages"],
1142
1152
  functions=formatted_tools,
1143
1153
  strategy=node_config.get("context_strategy"),
1154
+ mirror_messages=mirror_messages,
1144
1155
  )
1145
1156
  logger.debug("Updated LLM context")
1146
1157
 
@@ -1186,6 +1197,7 @@ In all of these cases, you can provide a `name` in your new node's config for de
1186
1197
  task_messages: List[dict],
1187
1198
  functions: List[dict],
1188
1199
  strategy: Optional[ContextStrategyConfig] = None,
1200
+ mirror_messages: Optional[List[dict]] = None,
1189
1201
  ) -> None:
1190
1202
  """Update LLM context with new messages and functions.
1191
1203
 
@@ -1194,6 +1206,9 @@ In all of these cases, you can provide a `name` in your new node's config for de
1194
1206
  task_messages: Task messages to add to context.
1195
1207
  functions: New functions to make available.
1196
1208
  strategy: Optional context update configuration.
1209
+ mirror_messages: Optional assistant messages from tts_say pre-actions
1210
+ with mirror_context=True. These are appended after task_messages
1211
+ so the LLM sees what was spoken to the user.
1197
1212
 
1198
1213
  Raises:
1199
1214
  FlowError: If context update fails.
@@ -1243,6 +1258,12 @@ In all of these cases, you can provide a `name` in your new node's config for de
1243
1258
  # Add task messages
1244
1259
  messages.extend(task_messages)
1245
1260
 
1261
+ # Add mirror messages (tts_say text mirrored as assistant context)
1262
+ # Placed after task_messages so the LLM sees: [system instructions] + [what was spoken]
1263
+ if mirror_messages:
1264
+ messages.extend(mirror_messages)
1265
+ logger.debug(f"Added {len(mirror_messages)} mirror message(s) to LLM context")
1266
+
1246
1267
  # For first node or RESET/RESET_WITH_SUMMARY strategy, use update frame
1247
1268
  frame_type = (
1248
1269
  LLMMessagesUpdateFrame