dv-pipecat-flows 0.0.22.dev2700__tar.gz → 0.0.23.dev2__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.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/.gitignore +5 -0
  2. {dv_pipecat_flows-0.0.22.dev2700/src/dv_pipecat_flows.egg-info → dv_pipecat_flows-0.0.23.dev2}/PKG-INFO +1 -1
  3. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/pyproject.toml +1 -1
  4. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2/src/dv_pipecat_flows.egg-info}/PKG-INFO +1 -1
  5. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/dv_pipecat_flows.egg-info/SOURCES.txt +2 -0
  6. dv_pipecat_flows-0.0.23.dev2/src/dv_pipecat_flows.egg-info/scm_file_list.json +491 -0
  7. dv_pipecat_flows-0.0.23.dev2/src/dv_pipecat_flows.egg-info/scm_version.json +8 -0
  8. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/pipecat_flows/adapters.py +21 -0
  9. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/pipecat_flows/condition_evaluator.py +225 -5
  10. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/pipecat_flows/manager.py +1349 -49
  11. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/pipecat_flows/processors/user_turn_observer.py +46 -1
  12. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/pipecat_flows/router_mode.py +34 -2
  13. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/pipecat_flows/types.py +26 -2
  14. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/.agents/skills/loki-logs/SKILL.md +0 -0
  15. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/.agents/skills/loki-logs/query-reference.md +0 -0
  16. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/.claude/skills/loki-logs/SKILL.md +0 -0
  17. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/.claude/skills/loki-logs/query-reference.md +0 -0
  18. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/.gitattributes +0 -0
  19. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/.pre-commit-config.yaml +0 -0
  20. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/.python-version +0 -0
  21. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/.readthedocs.yaml +0 -0
  22. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/AGENTS.md +0 -0
  23. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/CHANGELOG.md +0 -0
  24. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/CLAUDE.md +0 -0
  25. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/CONTRIBUTING.md +0 -0
  26. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/LICENSE +0 -0
  27. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/MANIFEST.in +0 -0
  28. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/README.md +0 -0
  29. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/dev-requirements.txt +0 -0
  30. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/docker-compose.dev.yml +0 -0
  31. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/.eslintrc.json +0 -0
  32. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/.prettierrc +0 -0
  33. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/css/tailwind.css +0 -0
  34. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/examples/food_ordering.json +0 -0
  35. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/examples/movie_explorer.json +0 -0
  36. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/examples/patient_intake.json +0 -0
  37. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/examples/restaurant_reservation.json +0 -0
  38. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/examples/travel_planner.json +0 -0
  39. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/favicon.png +0 -0
  40. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/favicon.svg +0 -0
  41. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/index.html +0 -0
  42. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/editor/canvas.js +0 -0
  43. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/editor/editorState.js +0 -0
  44. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/editor/sidePanel.js +0 -0
  45. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/editor/toolbar.js +0 -0
  46. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/main.js +0 -0
  47. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/nodes/baseNode.js +0 -0
  48. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/nodes/endNode.js +0 -0
  49. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/nodes/flowNode.js +0 -0
  50. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/nodes/functionNode.js +0 -0
  51. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/nodes/index.js +0 -0
  52. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/nodes/mergeNode.js +0 -0
  53. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/nodes/startNode.js +0 -0
  54. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/types.js +0 -0
  55. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/utils/export.js +0 -0
  56. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/utils/helpers.js +0 -0
  57. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/utils/import.js +0 -0
  58. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/js/utils/validation.js +0 -0
  59. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/jsdoc.json +0 -0
  60. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/package-lock.json +0 -0
  61. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/package.json +0 -0
  62. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/postcss.config.cjs +0 -0
  63. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/public/favicon.png +0 -0
  64. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/public/favicon.svg +0 -0
  65. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/tailwind.config.cjs +0 -0
  66. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/vercel.json +0 -0
  67. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/editor/vite.config.js +0 -0
  68. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/engine_primitives_plan.md +0 -0
  69. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/env.example +0 -0
  70. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/images/food-ordering-flow.png +0 -0
  71. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/pipecat-flows.png +0 -0
  72. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/pipecat_upgrade.md +0 -0
  73. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/remote-asterisk-code/README.md +0 -0
  74. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/remote-asterisk-code/extensions.conf +0 -0
  75. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/remote-asterisk-code/rtp.conf +0 -0
  76. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/requirements.txt +0 -0
  77. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/scripts/check-pypi-package.py +0 -0
  78. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/scripts/fix-ruff.sh +0 -0
  79. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/scripts/pre-commit.sh +0 -0
  80. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/setup.cfg +0 -0
  81. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/dv_pipecat_flows.egg-info/dependency_links.txt +0 -0
  82. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/dv_pipecat_flows.egg-info/requires.txt +0 -0
  83. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/dv_pipecat_flows.egg-info/top_level.txt +0 -0
  84. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/pipecat_flows/__init__.py +0 -0
  85. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/pipecat_flows/actions.py +0 -0
  86. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/pipecat_flows/exceptions.py +0 -0
  87. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/pipecat_flows/flow_validator.py +0 -0
  88. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/pipecat_flows/processors/__init__.py +0 -0
  89. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/pipecat_flows/processors/router_mode_guard.py +0 -0
  90. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/src/pipecat_flows/processors/speak_interruption_guard.py +0 -0
  91. {dv_pipecat_flows-0.0.22.dev2700 → dv_pipecat_flows-0.0.23.dev2}/uv.lock +0 -0
@@ -71,6 +71,11 @@ npm-debug.log*
71
71
  *.njsproj
72
72
  *.sln
73
73
  *.sw?
74
+ ringg-bot/eval/out/*
75
+ ringg-bot/eval/inputs/*
76
+ ringg-bot/eval/report/*
77
+ ringg-bot/eval/samples/*
78
+ ringg-bot/eval/comparison_analysis/*
74
79
 
75
80
  # Auto-generated docs
76
81
  docs/api
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-flows
3
- Version: 0.0.22.dev2700
3
+ Version: 0.0.23.dev2
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
@@ -45,7 +45,7 @@ dev = [
45
45
  "setuptools~=78.1.1",
46
46
  "setuptools_scm~=8.3.1",
47
47
  "python-dotenv>=1.0.1,<2.0.0",
48
- "dv-pipecat-ai[webrtc,websocket,daily,silero,deepgram,cartesia,openai,anthropic,google,aws,runner]>=0.0.85.dev0",
48
+ "dv-pipecat-ai[webrtc,websocket,daily,livekit,silero,deepgram,cartesia,openai,anthropic,google,aws,runner]>=0.0.85.dev0",
49
49
  ]
50
50
 
51
51
  docs = [
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-flows
3
- Version: 0.0.22.dev2700
3
+ Version: 0.0.23.dev2
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
@@ -71,6 +71,8 @@ src/dv_pipecat_flows.egg-info/PKG-INFO
71
71
  src/dv_pipecat_flows.egg-info/SOURCES.txt
72
72
  src/dv_pipecat_flows.egg-info/dependency_links.txt
73
73
  src/dv_pipecat_flows.egg-info/requires.txt
74
+ src/dv_pipecat_flows.egg-info/scm_file_list.json
75
+ src/dv_pipecat_flows.egg-info/scm_version.json
74
76
  src/dv_pipecat_flows.egg-info/top_level.txt
75
77
  src/pipecat_flows/__init__.py
76
78
  src/pipecat_flows/actions.py
@@ -0,0 +1,491 @@
1
+ {
2
+ "files": [
3
+ "LICENSE",
4
+ "requirements.txt",
5
+ "uv.lock",
6
+ "CHANGELOG.md",
7
+ "dev-requirements.txt",
8
+ ".pre-commit-config.yaml",
9
+ "pyproject.toml",
10
+ "pipecat_upgrade.md",
11
+ "MANIFEST.in",
12
+ "docker-compose.dev.yml",
13
+ "README.md",
14
+ ".gitignore",
15
+ "CONTRIBUTING.md",
16
+ ".gitattributes",
17
+ ".python-version",
18
+ "engine_primitives_plan.md",
19
+ "AGENTS.md",
20
+ "pipecat-flows.png",
21
+ "CLAUDE.md",
22
+ ".readthedocs.yaml",
23
+ "env.example",
24
+ "images/food-ordering-flow.png",
25
+ "k8s/livekit/Chart.yaml",
26
+ "k8s/livekit/README.md",
27
+ "k8s/livekit/values.yaml",
28
+ "k8s/livekit/values-prod.yaml",
29
+ "k8s/livekit/values-stage.yaml",
30
+ "k8s/livekit/templates/service-media.yaml",
31
+ "k8s/livekit/templates/deployment.yaml",
32
+ "k8s/livekit/templates/ingress.yaml",
33
+ "k8s/livekit/templates/backendconfig.yaml",
34
+ "k8s/livekit/templates/service.yaml",
35
+ "k8s/livekit/templates/secret-config.yaml",
36
+ "k8s/livekit/templates/managed-cert.yaml",
37
+ "k8s/livekit/templates/_helpers.tpl",
38
+ "k8s/dv-pipecat/values-stage-asia.yaml",
39
+ "k8s/dv-pipecat/values-canary-asia.yaml",
40
+ "k8s/dv-pipecat/Chart.yaml",
41
+ "k8s/dv-pipecat/.helmignore",
42
+ "k8s/dv-pipecat/values-prod-asia.yaml",
43
+ "k8s/dv-pipecat/values-canary.yaml",
44
+ "k8s/dv-pipecat/values.yaml",
45
+ "k8s/dv-pipecat/values-prod.yaml",
46
+ "k8s/dv-pipecat/values-stage.yaml",
47
+ "k8s/dv-pipecat/templates/keda-scaledobject.yaml",
48
+ "k8s/dv-pipecat/templates/cluster-role.yaml",
49
+ "k8s/dv-pipecat/templates/deployment.yaml",
50
+ "k8s/dv-pipecat/templates/pdb.yaml",
51
+ "k8s/dv-pipecat/templates/ingress.yaml",
52
+ "k8s/dv-pipecat/templates/backendconfig.yaml",
53
+ "k8s/dv-pipecat/templates/service.yaml",
54
+ "k8s/dv-pipecat/templates/keda-trigger-auth.yaml",
55
+ "k8s/dv-pipecat/templates/hpa.yaml",
56
+ "k8s/dv-pipecat/templates/serviceaccount.yaml",
57
+ "k8s/dv-pipecat/templates/_helpers.tpl",
58
+ "tests/test_router_no_unclear.py",
59
+ "tests/test_voicemail_detector.py",
60
+ "tests/test_tts_split_cache.py",
61
+ "tests/test_router_extract_schema.py",
62
+ "tests/test_keypad_menu_node.py",
63
+ "tests/test_hamsa_stt_config.py",
64
+ "tests/test_response_formatters.py",
65
+ "tests/test_collect_node.py",
66
+ "tests/test_openai_realtime_transcript_filter.py",
67
+ "tests/test_end_call_interruptible.py",
68
+ "tests/test_function_call_filler.py",
69
+ "tests/test_flows_direct_functions.py",
70
+ "tests/test_actions.py",
71
+ "tests/test_end_call_inactivity.py",
72
+ "tests/__init__.py",
73
+ "tests/test_credentials_resolver.py",
74
+ "tests/test_context_strategies.py",
75
+ "tests/test_adapters.py",
76
+ "tests/test_collect_prompts.py",
77
+ "tests/test_helpers.py",
78
+ "tests/test_manager.py",
79
+ "tests/test_end_of_call_processor.py",
80
+ "tests/test_condition_evaluator.py",
81
+ ".agents/skills/loki-logs/query-reference.md",
82
+ ".agents/skills/loki-logs/SKILL.md",
83
+ ".claude/skills/loki-logs/query-reference.md",
84
+ ".claude/skills/loki-logs/SKILL.md",
85
+ "docs/ASTERISK_CHAN_WEBSOCKET_MIGRATION.md",
86
+ "docs/index.rst",
87
+ "docs/OPENAI_RESPONSES_API_MIGRATION.md",
88
+ "docs/CALL_TRANSFER_API.md",
89
+ "docs/requirements.txt",
90
+ "docs/IMPLEMENTATION_SUMMARY.md",
91
+ "docs/Makefile",
92
+ "docs/conf.py",
93
+ "docs/ASTERISK_OUTBOUND_CHAN_WEBSOCKET.md",
94
+ "docs/ASTERISK_MACHINE_SETUP.md",
95
+ "docs/CALL_TRANSFER_SUMMARY_DESIGN.md",
96
+ "docs/make.bat",
97
+ "docs/build-docs.sh",
98
+ "docs/AZURE_MULTI_REGION_ROUTING.md",
99
+ "docs/examples/pb_fintech_call_transfer_config.json",
100
+ "ringg-bot/server.py",
101
+ "ringg-bot/pipeline_test.py",
102
+ "ringg-bot/pytest.ini",
103
+ "ringg-bot/remote-requirements.txt",
104
+ "ringg-bot/requirements.txt",
105
+ "ringg-bot/Dockerfile",
106
+ "ringg-bot/env_config.py",
107
+ "ringg-bot/to_json.sh",
108
+ "ringg-bot/PIPELINE_TESTING.md",
109
+ "ringg-bot/cache.py",
110
+ "ringg-bot/remote-Dockerfile",
111
+ "ringg-bot/README.md",
112
+ "ringg-bot/backchannel.py",
113
+ "ringg-bot/hold_detector.py",
114
+ "ringg-bot/intro_tts_c5ec47239377db3ca20deced71e4648b9c15951172288998b55347d2218304b2.mp3",
115
+ "ringg-bot/bot.py",
116
+ "ringg-bot/ultravox-server.py",
117
+ "ringg-bot/DEPLOYMENT.md",
118
+ "ringg-bot/issues.md",
119
+ "ringg-bot/voicemail_detector.py",
120
+ "ringg-bot/PIPECAT_ARCHITECTURE.md",
121
+ "ringg-bot/simulated_llm.py",
122
+ "ringg-bot/test_bot.py",
123
+ "ringg-bot/test.sh",
124
+ "ringg-bot/bot_with_flows.py",
125
+ "ringg-bot/env.example",
126
+ "ringg-bot/smart-turn-v3.2-cpu.onnx",
127
+ "ringg-bot/fillers/Monica/hmm.pcm",
128
+ "ringg-bot/fillers/Monica/got_it.pcm",
129
+ "ringg-bot/fillers/Monica/okay.pcm",
130
+ "ringg-bot/fillers/en-IN-RehaanNeural/en_got_it.wav",
131
+ "ringg-bot/fillers/en-IN-RehaanNeural/got_it.mp3",
132
+ "ringg-bot/fillers/en-IN-RehaanNeural/en_got_it.pcm",
133
+ "ringg-bot/fillers/Anuj/hmm.pcm",
134
+ "ringg-bot/fillers/Anuj/got_it.pcm",
135
+ "ringg-bot/fillers/Anuj/okay.pcm",
136
+ "ringg-bot/fillers/Dakota/hmm.pcm",
137
+ "ringg-bot/fillers/Dakota/got_it.pcm",
138
+ "ringg-bot/fillers/Dakota/okay.pcm",
139
+ "ringg-bot/fillers/Jonathan/hmm.pcm",
140
+ "ringg-bot/fillers/Jonathan/got_it.pcm",
141
+ "ringg-bot/fillers/Jonathan/okay.pcm",
142
+ "ringg-bot/fillers/Myra/hmm.pcm",
143
+ "ringg-bot/fillers/Myra/got_it.pcm",
144
+ "ringg-bot/fillers/Myra/okay.pcm",
145
+ "ringg-bot/fillers/Naina/hmm.pcm",
146
+ "ringg-bot/fillers/Naina/got_it.pcm",
147
+ "ringg-bot/fillers/Naina/okay.pcm",
148
+ "ringg-bot/fillers/Brittany/hmm.pcm",
149
+ "ringg-bot/fillers/Brittany/got_it.pcm",
150
+ "ringg-bot/fillers/Brittany/okay.pcm",
151
+ "ringg-bot/fillers/Raj/hmm.pcm",
152
+ "ringg-bot/fillers/Raj/got_it.pcm",
153
+ "ringg-bot/fillers/Raj/okay.pcm",
154
+ "ringg-bot/ringg_processors/livekit_rpc_bridge.py",
155
+ "ringg-bot/ringg_processors/end_of_call_processor.py",
156
+ "ringg-bot/ringg_processors/user_activity_reset_processor.py",
157
+ "ringg-bot/ringg_processors/language_steering_processor.py",
158
+ "ringg-bot/ringg_processors/openai_realtime_transcript_filter.py",
159
+ "ringg-bot/ringg_processors/realtime_tts_bridge.py",
160
+ "ringg-bot/ringg_processors/two_stage_user_idle_processor.py",
161
+ "ringg-bot/ringg_processors/function_call_filler_processor.py",
162
+ "ringg-bot/ringg_processors/screen_auto_injector.py",
163
+ "ringg-bot/ringg_processors/livekit_caption_observer.py",
164
+ "ringg-bot/misc/misc_service.py",
165
+ "ringg-bot/misc/router.py",
166
+ "ringg-bot/websocket/websocket_service.py",
167
+ "ringg-bot/websocket/router.py",
168
+ "ringg-bot/voice_services/common.py",
169
+ "ringg-bot/voice_services/runtime_config_helper.py",
170
+ "ringg-bot/voice_services/asteriskv2/websocket_handler.py",
171
+ "ringg-bot/voice_services/asteriskv2/asterisk_v2_service.py",
172
+ "ringg-bot/voice_services/asteriskv2/router.py",
173
+ "ringg-bot/voice_services/asteriskv2/provider_transforms.py",
174
+ "ringg-bot/voice_services/voicelink/__init__.py",
175
+ "ringg-bot/voice_services/voicelink/router.py",
176
+ "ringg-bot/voice_services/voicelink/voicelink_service.py",
177
+ "ringg-bot/voice_services/mcube/router.py",
178
+ "ringg-bot/voice_services/mcube/mcube_service.py",
179
+ "ringg-bot/voice_services/ozonetel/__init__.py",
180
+ "ringg-bot/voice_services/ozonetel/ozonetel_service.py",
181
+ "ringg-bot/voice_services/ozonetel/router.py",
182
+ "ringg-bot/voice_services/asterisk/asterisk_service.py",
183
+ "ringg-bot/voice_services/asterisk/router.py",
184
+ "ringg-bot/voice_services/exotel/exotel_service.py",
185
+ "ringg-bot/voice_services/exotel/__init__.py",
186
+ "ringg-bot/voice_services/exotel/router.py",
187
+ "ringg-bot/voice_services/webcall/webcall_router.py",
188
+ "ringg-bot/voice_services/webcall/webcall_service.py",
189
+ "ringg-bot/voice_services/webcall/webcall_params.py",
190
+ "ringg-bot/voice_services/tatatele/__init__.py",
191
+ "ringg-bot/voice_services/tatatele/router.py",
192
+ "ringg-bot/voice_services/tatatele/tatatele_service.py",
193
+ "ringg-bot/voice_services/convox/__init__.py",
194
+ "ringg-bot/voice_services/convox/convox_service.py",
195
+ "ringg-bot/voice_services/convox/router.py",
196
+ "ringg-bot/voice_services/plivo/__init__.py",
197
+ "ringg-bot/voice_services/plivo/plivo_service.py",
198
+ "ringg-bot/voice_services/plivo/router.py",
199
+ "ringg-bot/voice_services/vobiz/vobiz_service.py",
200
+ "ringg-bot/voice_services/vobiz/router.py",
201
+ "ringg-bot/voice_services/maqsam/maqsam_service.py",
202
+ "ringg-bot/voice_services/maqsam/__init__.py",
203
+ "ringg-bot/voice_services/maqsam/router.py",
204
+ "ringg-bot/voice_services/whatsapp/__init__.py",
205
+ "ringg-bot/voice_services/whatsapp/whatsapp_service.py",
206
+ "ringg-bot/voice_services/whatsapp/router.py",
207
+ "ringg-bot/voice_services/twilio/__init__.py",
208
+ "ringg-bot/voice_services/twilio/twiml_helpers.py",
209
+ "ringg-bot/voice_services/twilio/router.py",
210
+ "ringg-bot/voice_services/twilio/twilio_service.py",
211
+ "ringg-bot/transports/factory.py",
212
+ "ringg-bot/tests/test_tts_currency.py",
213
+ "ringg-bot/tests/test_azure_region_routing.py",
214
+ "ringg-bot/tests/test_sdk_tool_schema.py",
215
+ "ringg-bot/tests/conftest.py",
216
+ "ringg-bot/tests/test_inbound_registration_race.py",
217
+ "ringg-bot/tests/test_language_map.py",
218
+ "ringg-bot/tests/test_warning_fixed_message.py",
219
+ "ringg-bot/tests/test_variable_replacement.py",
220
+ "ringg-bot/tests/test_metrics_bridge.py",
221
+ "ringg-bot/tests/test_language_steering.py",
222
+ "ringg-bot/tests/test_logger_brace_safety.py",
223
+ "ringg-bot/tests/test_on_call_sdk_context.py",
224
+ "ringg-bot/tests/test_word_timestamp_logger.py",
225
+ "ringg-bot/tests/__init__.py",
226
+ "ringg-bot/tests/test_kb_planner.py",
227
+ "ringg-bot/tests/test_whatsapp.py",
228
+ "ringg-bot/tests/test_recording_flush.py",
229
+ "ringg-bot/tests/test_metrics_collector_llm.py",
230
+ "ringg-bot/tests/test_language_sample_store.py",
231
+ "ringg-bot/tests/test_traffic_split.py",
232
+ "ringg-bot/tests/test_flow_query_kb.py",
233
+ "ringg-bot/tests/test_sdk_executor_flatten.py",
234
+ "ringg-bot/tests/test_decimal_safe_aggregator.py",
235
+ "ringg-bot/tests/test_dropped_turn_regeneration.py",
236
+ "ringg-bot/tests/test_on_call_api_pre_call_message.py",
237
+ "ringg-bot/tests/test_ozonetel_inbound.py",
238
+ "ringg-bot/tests/test_connection_watchdog.py",
239
+ "ringg-bot/tests/test_summary_dispatcher.py",
240
+ "ringg-bot/tests/test_ozonetel_transfer.py",
241
+ "ringg-bot/tests/test_tool_executor_context.py",
242
+ "ringg-bot/tests/test_custom_vars_pipeline_parity.py",
243
+ "ringg-bot/simulation/simulation_service.py",
244
+ "ringg-bot/simulation/__init__.py",
245
+ "ringg-bot/simulation/router.py",
246
+ "ringg-bot/utils/analyzer_pool.py",
247
+ "ringg-bot/utils/auth.py",
248
+ "ringg-bot/utils/plivo_utils.py",
249
+ "ringg-bot/utils/tracing.py",
250
+ "ringg-bot/utils/deepgram_warmup.py",
251
+ "ringg-bot/utils/collect_prompts.py",
252
+ "ringg-bot/utils/tools_helper.py",
253
+ "ringg-bot/utils/backend_url_resolver.py",
254
+ "ringg-bot/utils/test_cache_8k.mp3",
255
+ "ringg-bot/utils/language_resolver.py",
256
+ "ringg-bot/utils/tracking_helpers.py",
257
+ "ringg-bot/utils/transcript.py",
258
+ "ringg-bot/utils/logger_config.py",
259
+ "ringg-bot/utils/summary_dispatcher.py",
260
+ "ringg-bot/utils/bot_common.py",
261
+ "ringg-bot/utils/http_client.py",
262
+ "ringg-bot/utils/credentials.py",
263
+ "ringg-bot/utils/language_detection.py",
264
+ "ringg-bot/utils/frames_monitor.py",
265
+ "ringg-bot/utils/long_input_processor.py",
266
+ "ringg-bot/utils/constants.py",
267
+ "ringg-bot/utils/generate_config.py",
268
+ "ringg-bot/utils/ozonetel_transfer.py",
269
+ "ringg-bot/utils/rate_limiter.py",
270
+ "ringg-bot/utils/tts.py",
271
+ "ringg-bot/utils/app_metrics.py",
272
+ "ringg-bot/utils/common_helper.py",
273
+ "ringg-bot/utils/llm.py",
274
+ "ringg-bot/utils/stay_on_line_processor.py",
275
+ "ringg-bot/utils/jinja.py",
276
+ "ringg-bot/utils/language_sample_store.py",
277
+ "ringg-bot/utils/twilio_async_client.py",
278
+ "ringg-bot/utils/asterisk_ari_client.py",
279
+ "ringg-bot/utils/metrics_collector.py",
280
+ "ringg-bot/utils/api_calls.py",
281
+ "ringg-bot/utils/warning_messages.py",
282
+ "ringg-bot/utils/function_call_tracker.py",
283
+ "ringg-bot/utils/pipeline.py",
284
+ "ringg-bot/utils/call_timing.py",
285
+ "ringg-bot/utils/azure_region_routing.py",
286
+ "ringg-bot/utils/cryptography.py",
287
+ "ringg-bot/utils/rag_filters.py",
288
+ "ringg-bot/utils/callbacks.py",
289
+ "ringg-bot/utils/plivo_async_client.py",
290
+ "ringg-bot/utils/decimal_safe_aggregator.py",
291
+ "ringg-bot/utils/word_timestamp_logger.py",
292
+ "ringg-bot/utils/participant_handler.py",
293
+ "ringg-bot/utils/collect_normalizers.py",
294
+ "ringg-bot/utils/test_cache_new.mp3",
295
+ "ringg-bot/utils/asterisk_url_resolver.py",
296
+ "ringg-bot/utils/call_status.py",
297
+ "ringg-bot/utils/background_audio.py",
298
+ "ringg-bot/utils/call_transfer_strategies.py",
299
+ "ringg-bot/utils/tool_executor.py",
300
+ "ringg-bot/utils/action_call_handler.py",
301
+ "ringg-bot/utils/openai_config_routing.py",
302
+ "ringg-bot/utils/stt.py",
303
+ "ringg-bot/utils/flow_tools/collect_long_input.py",
304
+ "ringg-bot/utils/flow_tools/end_call.py",
305
+ "ringg-bot/utils/flow_tools/__init__.py",
306
+ "ringg-bot/utils/flow_tools/wait_for_dtmf.py",
307
+ "ringg-bot/utils/flow_tools/switch_language.py",
308
+ "ringg-bot/utils/flow_tools/dtmf_output.py",
309
+ "ringg-bot/utils/flow_tools/call_transfer.py",
310
+ "ringg-bot/utils/flow_tools/stay_on_line.py",
311
+ "ringg-bot/utils/flow_tools/generic_function.py",
312
+ "ringg-bot/utils/flow_tools/send_widgets.py",
313
+ "ringg-bot/utils/flow_tools/integration_function.py",
314
+ "ringg-bot/utils/flow_tools/query_kb.py",
315
+ "ringg-bot/utils/llm_functions/collect_long_input.py",
316
+ "ringg-bot/utils/llm_functions/end_call_common.py",
317
+ "ringg-bot/utils/llm_functions/tools.py",
318
+ "ringg-bot/utils/llm_functions/tools_definition.py",
319
+ "ringg-bot/utils/llm_functions/wait_for_dtmf.py",
320
+ "ringg-bot/utils/llm_functions/switch_language.py",
321
+ "ringg-bot/utils/llm_functions/dtmf_output.py",
322
+ "ringg-bot/utils/llm_functions/call_transfer.py",
323
+ "ringg-bot/utils/llm_functions/stay_on_line.py",
324
+ "ringg-bot/utils/llm_functions/generic_function.py",
325
+ "ringg-bot/utils/llm_functions/end_call_handler.py",
326
+ "ringg-bot/utils/llm_functions/_kb_planner.py",
327
+ "ringg-bot/utils/llm_functions/integration_function.py",
328
+ "ringg-bot/utils/llm_functions/query_kb.py",
329
+ "ringg-bot/utils/generic_functions/response_handler.py",
330
+ "ringg-bot/utils/generic_functions/cleanup.py",
331
+ "ringg-bot/utils/generic_functions/common.py",
332
+ "ringg-bot/utils/generic_functions/sdk_executor.py",
333
+ "ringg-bot/utils/generic_functions/inbound_registration.py",
334
+ "ringg-bot/models/krisp-viva-tel-v2.kef",
335
+ "ringg-bot/rag/weaviate_client.py",
336
+ "ringg-bot/rag/weaviate_script.py",
337
+ "ringg-bot/rag/helpers.py",
338
+ "ringg-bot/serializers/ozonetel.py",
339
+ "ringg-bot/serializers/vobiz.py",
340
+ "ringg-bot/scripts/delete_agent_cache.py",
341
+ "ringg-bot/scripts/langfuse_export.py",
342
+ "ringg-bot/templates/uv-stream.xml",
343
+ "ringg-bot/templates/vobiz-stream.xml",
344
+ "ringg-bot/templates/vobiz-hangup.xml",
345
+ "ringg-bot/templates/plivo-non-record-stream.xml",
346
+ "ringg-bot/templates/plivo-stream.xml",
347
+ "ringg-bot/templates/plivo-inbound-stream.xml",
348
+ "ringg-bot/templates/twilio-stream.xml",
349
+ "ringg-bot/templates/plivo-hangup.xml",
350
+ "ringg-bot/eval/agents_to_shift.py",
351
+ "ringg-bot/eval/run_eval.py",
352
+ "ringg-bot/eval/tool_compare.py",
353
+ "ringg-bot/eval/complete_conversation.py",
354
+ "ringg-bot/eval/judge_adherence.py",
355
+ "ringg-bot/eval/models.py",
356
+ "ringg-bot/eval/similarity.py",
357
+ "ringg-bot/eval/csv_report.py",
358
+ "ringg-bot/eval/candidate_llm.py",
359
+ "ringg-bot/eval/__init__.py",
360
+ "ringg-bot/eval/turn_level.py",
361
+ "ringg-bot/eval/scorecard.py",
362
+ "ringg-bot/eval/from_langfuse.py",
363
+ "ringg-bot/eval/README.md",
364
+ "ringg-bot/eval/langfuse_trace.py",
365
+ "ringg-bot/eval/semantic_report.py",
366
+ "ringg-bot/replay/runner.py",
367
+ "ringg-bot/replay/__init__.py",
368
+ "ringg-bot/replay/tool_sandbox.py",
369
+ "ringg-bot/replay/schemas.py",
370
+ "ringg-bot/replay/router.py",
371
+ "ringg-bot/assets/background/office_ambience_8k_mono.wav",
372
+ "ringg-bot/krisp_wheels/krisp_audio-1.5.0-cp312-cp312-linux_x86_64.whl",
373
+ "ringg-bot/krisp_wheels/README.md",
374
+ "ringg-bot/krisp_wheels/krisp_audio-1.5.0-cp312-cp312-macosx_12_0_arm64.whl",
375
+ "ringg-bot/krisp_wheels/krisp_audio-1.5.0-cp312-cp312-linux_aarch64.whl",
376
+ "examples/patient_intake.py",
377
+ "examples/runner.py",
378
+ "examples/README.md",
379
+ "examples/insurance_quote.py",
380
+ "examples/utils.py",
381
+ "examples/llm_switching.py",
382
+ "examples/food_ordering_direct_functions.py",
383
+ "examples/food_ordering.py",
384
+ "examples/restaurant_reservation.py",
385
+ "examples/restaurant_reservation_direct_functions.py",
386
+ "examples/warm_transfer.py",
387
+ "examples/dynamic/insurance_anthropic.py",
388
+ "examples/dynamic/insurance_openai.py",
389
+ "examples/dynamic/insurance_aws_bedrock.py",
390
+ "examples/dynamic/insurance_gemini.py",
391
+ "examples/dynamic/restaurant_reservation.py",
392
+ "examples/dynamic/restaurant_reservation_direct_functions.py",
393
+ "examples/dynamic/warm_transfer.py",
394
+ "examples/quickstart/hello_world.py",
395
+ "examples/quickstart/requirements.txt",
396
+ "examples/quickstart/README.md",
397
+ "examples/static/travel_planner.py",
398
+ "examples/static/patient_intake_gemini.py",
399
+ "examples/static/movie_explorer_openai.py",
400
+ "examples/static/patient_intake_anthropic.py",
401
+ "examples/static/movie_explorer_anthropic.py",
402
+ "examples/static/movie_explorer_gemini.py",
403
+ "examples/static/patient_intake_aws_bedrock.py",
404
+ "examples/static/food_ordering_direct_functions.py",
405
+ "examples/static/food_ordering.py",
406
+ "examples/static/patient_intake_openai.py",
407
+ "examples/assets/hold_music/hold_music.wav",
408
+ "examples/assets/hold_music/README.md",
409
+ "examples/assets/hold_music/hold_music.py",
410
+ "scripts/fix-ruff.sh",
411
+ "scripts/check-pypi-package.py",
412
+ "scripts/pre-commit.sh",
413
+ ".github/PULL_REQUEST_TEMPLATE.md",
414
+ ".github/workflows/force_push_to_pypi.yml",
415
+ ".github/workflows/tests.yaml",
416
+ ".github/workflows/publish_test.yaml",
417
+ ".github/workflows/android.yaml",
418
+ ".github/workflows/test.yml",
419
+ ".github/workflows/github.yml",
420
+ ".github/workflows/publish.yaml",
421
+ ".github/workflows/coverage.yaml",
422
+ ".github/workflows/publish-test.yml",
423
+ ".github/workflows/format.yaml",
424
+ ".github/workflows/set-traffic-split.yml",
425
+ ".github/workflows/build.yaml",
426
+ ".github/workflows/restart-with-secrets.yml",
427
+ ".github/workflows/promote-prod.yml",
428
+ ".github/workflows/publish-pypi.yml",
429
+ ".github/ISSUE_TEMPLATE/2-question.yml",
430
+ ".github/ISSUE_TEMPLATE/1-bug_report.yml",
431
+ ".github/ISSUE_TEMPLATE/5-new-service.yml",
432
+ ".github/ISSUE_TEMPLATE/config.yml",
433
+ ".github/ISSUE_TEMPLATE/3-feature_request.yml",
434
+ ".github/ISSUE_TEMPLATE/6-dependency.yml",
435
+ ".github/ISSUE_TEMPLATE/7-troubleshooting.yml",
436
+ ".github/ISSUE_TEMPLATE/4-service-issue.yml",
437
+ "editor/index.html",
438
+ "editor/vercel.json",
439
+ "editor/jsdoc.json",
440
+ "editor/postcss.config.cjs",
441
+ "editor/vite.config.js",
442
+ "editor/favicon.png",
443
+ "editor/tailwind.config.cjs",
444
+ "editor/package-lock.json",
445
+ "editor/package.json",
446
+ "editor/.prettierrc",
447
+ "editor/.eslintrc.json",
448
+ "editor/favicon.svg",
449
+ "editor/css/tailwind.css",
450
+ "editor/js/types.js",
451
+ "editor/js/main.js",
452
+ "editor/js/nodes/startNode.js",
453
+ "editor/js/nodes/mergeNode.js",
454
+ "editor/js/nodes/flowNode.js",
455
+ "editor/js/nodes/index.js",
456
+ "editor/js/nodes/functionNode.js",
457
+ "editor/js/nodes/endNode.js",
458
+ "editor/js/nodes/baseNode.js",
459
+ "editor/js/utils/export.js",
460
+ "editor/js/utils/import.js",
461
+ "editor/js/utils/validation.js",
462
+ "editor/js/utils/helpers.js",
463
+ "editor/js/editor/sidePanel.js",
464
+ "editor/js/editor/editorState.js",
465
+ "editor/js/editor/canvas.js",
466
+ "editor/js/editor/toolbar.js",
467
+ "editor/public/favicon.png",
468
+ "editor/public/favicon.svg",
469
+ "editor/examples/patient_intake.json",
470
+ "editor/examples/restaurant_reservation.json",
471
+ "editor/examples/movie_explorer.json",
472
+ "editor/examples/food_ordering.json",
473
+ "editor/examples/travel_planner.json",
474
+ "remote-asterisk-code/README.md",
475
+ "remote-asterisk-code/rtp.conf",
476
+ "remote-asterisk-code/extensions.conf",
477
+ "src/pipecat_flows/flow_validator.py",
478
+ "src/pipecat_flows/actions.py",
479
+ "src/pipecat_flows/__init__.py",
480
+ "src/pipecat_flows/types.py",
481
+ "src/pipecat_flows/condition_evaluator.py",
482
+ "src/pipecat_flows/router_mode.py",
483
+ "src/pipecat_flows/exceptions.py",
484
+ "src/pipecat_flows/manager.py",
485
+ "src/pipecat_flows/adapters.py",
486
+ "src/pipecat_flows/processors/user_turn_observer.py",
487
+ "src/pipecat_flows/processors/__init__.py",
488
+ "src/pipecat_flows/processors/speak_interruption_guard.py",
489
+ "src/pipecat_flows/processors/router_mode_guard.py"
490
+ ]
491
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.0.21",
3
+ "distance": 1590,
4
+ "node": "g68bb0481ac9d17412e39fb73da7a0e07253e200d",
5
+ "dirty": true,
6
+ "branch": "feat/livekit_transport",
7
+ "node_date": "2026-07-06"
8
+ }
@@ -961,9 +961,30 @@ class GeminiAdapter(LLMAdapter):
961
961
  if not gemini_functions:
962
962
  return []
963
963
 
964
+ # Gemini rejects the whole request (400 INVALID_ARGUMENT) if any
965
+ # array-typed parameter lacks `items` — a schema shape OpenAI/Azure
966
+ # silently tolerate, so dashboard-authored tools can carry it.
967
+ for func in gemini_functions:
968
+ self._ensure_array_items(func.get("parameters"))
969
+
964
970
  # Format as Gemini expects - an array with a single object containing function_declarations
965
971
  return [{"function_declarations": gemini_functions}]
966
972
 
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
+
967
988
  def format_summary_message(self, summary: str) -> dict:
968
989
  """Format summary as a user message for Gemini.
969
990