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.
- {dv_pipecat_flows-0.0.23.dev2/src/dv_pipecat_flows.egg-info → dv_pipecat_flows-0.0.23.dev4}/PKG-INFO +1 -1
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4/src/dv_pipecat_flows.egg-info}/PKG-INFO +1 -1
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/adapters.py +28 -16
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/manager.py +8 -2
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.agents/skills/loki-logs/SKILL.md +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.agents/skills/loki-logs/query-reference.md +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.claude/skills/loki-logs/SKILL.md +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.claude/skills/loki-logs/query-reference.md +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.gitattributes +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.gitignore +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.pre-commit-config.yaml +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.python-version +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.readthedocs.yaml +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/AGENTS.md +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/CHANGELOG.md +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/CLAUDE.md +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/CONTRIBUTING.md +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/LICENSE +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/MANIFEST.in +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/README.md +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/dev-requirements.txt +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/docker-compose.dev.yml +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/.eslintrc.json +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/.prettierrc +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/css/tailwind.css +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/examples/food_ordering.json +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/examples/movie_explorer.json +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/examples/patient_intake.json +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/examples/restaurant_reservation.json +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/examples/travel_planner.json +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/favicon.png +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/favicon.svg +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/index.html +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/editor/canvas.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/editor/editorState.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/editor/sidePanel.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/editor/toolbar.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/main.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/nodes/baseNode.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/nodes/endNode.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/nodes/flowNode.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/nodes/functionNode.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/nodes/index.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/nodes/mergeNode.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/nodes/startNode.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/types.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/utils/export.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/utils/helpers.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/utils/import.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/js/utils/validation.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/jsdoc.json +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/package-lock.json +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/package.json +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/postcss.config.cjs +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/public/favicon.png +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/public/favicon.svg +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/tailwind.config.cjs +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/vercel.json +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/vite.config.js +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/engine_primitives_plan.md +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/env.example +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/images/food-ordering-flow.png +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/pipecat-flows.png +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/pipecat_upgrade.md +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/pyproject.toml +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/remote-asterisk-code/README.md +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/remote-asterisk-code/extensions.conf +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/remote-asterisk-code/rtp.conf +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/requirements.txt +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/scripts/check-pypi-package.py +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/scripts/fix-ruff.sh +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/scripts/pre-commit.sh +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/setup.cfg +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/dv_pipecat_flows.egg-info/SOURCES.txt +0 -0
- {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
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/dv_pipecat_flows.egg-info/requires.txt +0 -0
- {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
- {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
- {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
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/__init__.py +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/actions.py +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/condition_evaluator.py +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/exceptions.py +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/flow_validator.py +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/processors/__init__.py +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/processors/router_mode_guard.py +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/processors/speak_interruption_guard.py +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/processors/user_turn_observer.py +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/router_mode.py +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/types.py +0 -0
- {dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/uv.lock +0 -0
|
@@ -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
|
-
|
|
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
|
|
{dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.agents/skills/loki-logs/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/.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.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/examples/food_ordering.json
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/examples/movie_explorer.json
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/editor/examples/patient_intake.json
RENAMED
|
File without changes
|
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/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.dev2 → dv_pipecat_flows-0.0.23.dev4}/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.dev2 → dv_pipecat_flows-0.0.23.dev4}/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.dev2 → dv_pipecat_flows-0.0.23.dev4}/remote-asterisk-code/README.md
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/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.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/exceptions.py
RENAMED
|
File without changes
|
{dv_pipecat_flows-0.0.23.dev2 → dv_pipecat_flows-0.0.23.dev4}/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.dev2 → dv_pipecat_flows-0.0.23.dev4}/src/pipecat_flows/router_mode.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|