dv-pipecat-flows 0.0.23.dev2__tar.gz → 0.0.23.dev4__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.dev2/src/dv_pipecat_flows.egg-info → dv_pipecat_flows-0.0.23.dev4}/PKG-INFO +1 -1
  2. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4/src/dv_pipecat_flows.egg-info}/PKG-INFO +1 -1
  3. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/adapters.py +28 -16
  4. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/manager.py +8 -2
  5. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.agents/skills/loki-logs/SKILL.md +0 -0
  6. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.agents/skills/loki-logs/query-reference.md +0 -0
  7. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.claude/skills/loki-logs/SKILL.md +0 -0
  8. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.claude/skills/loki-logs/query-reference.md +0 -0
  9. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.gitattributes +0 -0
  10. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.gitignore +0 -0
  11. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.pre-commit-config.yaml +0 -0
  12. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.python-version +0 -0
  13. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.readthedocs.yaml +0 -0
  14. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/AGENTS.md +0 -0
  15. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/CHANGELOG.md +0 -0
  16. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/CLAUDE.md +0 -0
  17. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/CONTRIBUTING.md +0 -0
  18. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/LICENSE +0 -0
  19. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/MANIFEST.in +0 -0
  20. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/README.md +0 -0
  21. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/dev-requirements.txt +0 -0
  22. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/docker-compose.dev.yml +0 -0
  23. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/.eslintrc.json +0 -0
  24. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/.prettierrc +0 -0
  25. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/css/tailwind.css +0 -0
  26. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/examples/food_ordering.json +0 -0
  27. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/examples/movie_explorer.json +0 -0
  28. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/examples/patient_intake.json +0 -0
  29. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/examples/restaurant_reservation.json +0 -0
  30. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/examples/travel_planner.json +0 -0
  31. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/favicon.png +0 -0
  32. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/favicon.svg +0 -0
  33. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/index.html +0 -0
  34. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/editor/canvas.js +0 -0
  35. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/editor/editorState.js +0 -0
  36. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/editor/sidePanel.js +0 -0
  37. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/editor/toolbar.js +0 -0
  38. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/main.js +0 -0
  39. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/nodes/baseNode.js +0 -0
  40. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/nodes/endNode.js +0 -0
  41. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/nodes/flowNode.js +0 -0
  42. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/nodes/functionNode.js +0 -0
  43. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/nodes/index.js +0 -0
  44. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/nodes/mergeNode.js +0 -0
  45. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/nodes/startNode.js +0 -0
  46. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/types.js +0 -0
  47. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/utils/export.js +0 -0
  48. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/utils/helpers.js +0 -0
  49. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/utils/import.js +0 -0
  50. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/utils/validation.js +0 -0
  51. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/jsdoc.json +0 -0
  52. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/package-lock.json +0 -0
  53. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/package.json +0 -0
  54. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/postcss.config.cjs +0 -0
  55. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/public/favicon.png +0 -0
  56. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/public/favicon.svg +0 -0
  57. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/tailwind.config.cjs +0 -0
  58. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/vercel.json +0 -0
  59. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/vite.config.js +0 -0
  60. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/engine_primitives_plan.md +0 -0
  61. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/env.example +0 -0
  62. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/images/food-ordering-flow.png +0 -0
  63. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/pipecat-flows.png +0 -0
  64. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/pipecat_upgrade.md +0 -0
  65. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/pyproject.toml +0 -0
  66. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/remote-asterisk-code/README.md +0 -0
  67. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/remote-asterisk-code/extensions.conf +0 -0
  68. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/remote-asterisk-code/rtp.conf +0 -0
  69. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/requirements.txt +0 -0
  70. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/scripts/check-pypi-package.py +0 -0
  71. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/scripts/fix-ruff.sh +0 -0
  72. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/scripts/pre-commit.sh +0 -0
  73. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/setup.cfg +0 -0
  74. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/dv_pipecat_flows.egg-info/SOURCES.txt +0 -0
  75. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/dv_pipecat_flows.egg-info/dependency_links.txt +0 -0
  76. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/dv_pipecat_flows.egg-info/requires.txt +0 -0
  77. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/dv_pipecat_flows.egg-info/scm_file_list.json +0 -0
  78. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/dv_pipecat_flows.egg-info/scm_version.json +0 -0
  79. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/dv_pipecat_flows.egg-info/top_level.txt +0 -0
  80. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/__init__.py +0 -0
  81. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/actions.py +0 -0
  82. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/condition_evaluator.py +0 -0
  83. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/exceptions.py +0 -0
  84. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/flow_validator.py +0 -0
  85. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/processors/__init__.py +0 -0
  86. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/processors/router_mode_guard.py +0 -0
  87. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/processors/speak_interruption_guard.py +0 -0
  88. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/processors/user_turn_observer.py +0 -0
  89. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/router_mode.py +0 -0
  90. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/types.py +0 -0
  91. {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/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.dev2
3
+ Version: 0.0.23.dev4
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.dev2
3
+ Version: 0.0.23.dev4
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
@@ -31,6 +31,27 @@ from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
31
31
  from pipecat_flows.types import FlowsDirectFunctionWrapper, FlowsFunctionSchema
32
32
 
33
33
 
34
+ def _ensure_array_items(schema: Any) -> None:
35
+ """Recursively default `items` to string for array properties missing it.
36
+
37
+ Gemini rejects the whole request (400 INVALID_ARGUMENT) if any array-typed
38
+ parameter lacks `items` — a schema shape OpenAI/Azure silently tolerate, so
39
+ dashboard-authored tools can carry it. Adding `items` is valid JSON Schema
40
+ for every provider, so this is safe to apply universally.
41
+ """
42
+ if not isinstance(schema, dict):
43
+ return
44
+ schema_type = schema.get("type")
45
+ is_array = schema_type == "array" or (
46
+ isinstance(schema_type, list) and "array" in schema_type
47
+ )
48
+ if is_array and "items" not in schema:
49
+ schema["items"] = {"type": "string"}
50
+ for prop in (schema.get("properties") or {}).values():
51
+ _ensure_array_items(prop)
52
+ _ensure_array_items(schema.get("items"))
53
+
54
+
34
55
  class LLMAdapter:
35
56
  """Base adapter for LLM-specific format handling.
36
57
 
@@ -439,6 +460,12 @@ class UniversalLLMAdapter(LLMAdapter):
439
460
  # Pipecat's universal LLMContext.
440
461
  if not formatted_functions:
441
462
  return NOT_GIVEN
463
+ # The universal path bypasses provider adapters (e.g. GeminiAdapter),
464
+ # so array params must be sanitized here before pipecat core's
465
+ # provider adapters serialize them verbatim.
466
+ for func in formatted_functions.standard_tools or []:
467
+ for prop in (func.properties or {}).values():
468
+ _ensure_array_items(prop)
442
469
  return formatted_functions
443
470
 
444
471
  def format_summary_message(self, summary: str) -> dict:
@@ -965,26 +992,11 @@ class GeminiAdapter(LLMAdapter):
965
992
  # array-typed parameter lacks `items` — a schema shape OpenAI/Azure
966
993
  # silently tolerate, so dashboard-authored tools can carry it.
967
994
  for func in gemini_functions:
968
- self._ensure_array_items(func.get("parameters"))
995
+ _ensure_array_items(func.get("parameters"))
969
996
 
970
997
  # Format as Gemini expects - an array with a single object containing function_declarations
971
998
  return [{"function_declarations": gemini_functions}]
972
999
 
973
- @classmethod
974
- def _ensure_array_items(cls, schema: Any) -> None:
975
- """Recursively default `items` to string for array properties missing it."""
976
- if not isinstance(schema, dict):
977
- return
978
- schema_type = schema.get("type")
979
- is_array = schema_type == "array" or (
980
- isinstance(schema_type, list) and "array" in schema_type
981
- )
982
- if is_array and "items" not in schema:
983
- schema["items"] = {"type": "string"}
984
- for prop in (schema.get("properties") or {}).values():
985
- cls._ensure_array_items(prop)
986
- cls._ensure_array_items(schema.get("items"))
987
-
988
1000
  def format_summary_message(self, summary: str) -> dict:
989
1001
  """Format summary as a user message for Gemini.
990
1002
 
@@ -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