From d96f7b05b36c475d46639d1cddb0c65ae692dadf Mon Sep 17 00:00:00 2001 From: Katrina Date: Fri, 8 May 2026 10:32:28 -0700 Subject: [PATCH 1/3] update openai to support gpt-realtime-2 --- pyproject.toml | 2 +- uv.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 48897d77..fc50ec5e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ dependencies = [ "pydantic-settings>=2.0", "pipecat-ai>=0.0.108", "elevenlabs>=1.0.0", - "openai>=1.0.0", + "openai>=2.36.0", "anthropic>=0.83.0", "litellm==1.82.6", "deepgram-sdk>=6.1.1,<7", diff --git a/uv.lock b/uv.lock index e8b51a23..d521e2b8 100644 --- a/uv.lock +++ b/uv.lock @@ -812,7 +812,7 @@ requires-dist = [ { name = "mypy", marker = "extra == 'dev'", specifier = ">=1.5" }, { name = "numpy", specifier = ">=1.24" }, { name = "onnxruntime", specifier = ">=1.16.0" }, - { name = "openai", specifier = ">=1.0.0" }, + { name = "openai", specifier = ">=2.36.0" }, { name = "pandas", specifier = ">=2.0" }, { name = "pandas", marker = "extra == 'apps'", specifier = ">=2.0" }, { name = "pipecat-ai", specifier = ">=0.0.108" }, @@ -2020,7 +2020,7 @@ wheels = [ [[package]] name = "openai" -version = "2.24.0" +version = "2.36.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -2032,9 +2032,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/13/17e87641b89b74552ed408a92b231283786523edddc95f3545809fab673c/openai-2.24.0.tar.gz", hash = "sha256:1e5769f540dbd01cb33bc4716a23e67b9d695161a734aff9c5f925e2bf99a673", size = 658717, upload-time = "2026-02-24T20:02:07.958Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f4/a1/4d5e84cf51720fc1526cc49e10ac1961abcccb55b0efb3d970db1e9a2728/openai-2.36.0.tar.gz", hash = "sha256:139dea0edd2f1b30c33d46ae1a6929e03906254140318e4608e98fe8c566f2e7", size = 753003, upload-time = "2026-05-07T17:33:17.075Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c9/30/844dc675ee6902579b8eef01ed23917cc9319a1c9c0c14ec6e39340c96d0/openai-2.24.0-py3-none-any.whl", hash = "sha256:fed30480d7d6c884303287bde864980a4b137b60553ffbcf9ab4a233b7a73d94", size = 1120122, upload-time = "2026-02-24T20:02:05.669Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1c/5d43735b2553baae2a5e899dcbcd0670a86930d993184d72ca909bf11c9b/openai-2.36.0-py3-none-any.whl", hash = "sha256:143f6194b548dbc2c921af1f1b03b9f14c85fed8a75b5b516f5bcc11a2a50c63", size = 1302361, upload-time = "2026-05-07T17:33:15.063Z" }, ] [[package]] From fba1630e496d603011d7be1b0d2415183c39ae39 Mon Sep 17 00:00:00 2001 From: Katrina Date: Fri, 8 May 2026 12:21:26 -0700 Subject: [PATCH 2/3] update elevenlabs tool script to control pre-tool speech and execution mode --- scripts/create_elevenlabs_tools.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/scripts/create_elevenlabs_tools.py b/scripts/create_elevenlabs_tools.py index 371406d9..6d98614c 100644 --- a/scripts/create_elevenlabs_tools.py +++ b/scripts/create_elevenlabs_tools.py @@ -86,7 +86,11 @@ def build_parameters(tool: dict) -> ObjectJsonSchemaPropertyInput: ) -def convert_tool(tool: dict) -> ToolRequestModel: +def convert_tool( + tool: dict, + pre_tool_speech: str = "force", + execution_mode: str = "immediate", +) -> ToolRequestModel: """Convert a YAML tool definition to an ElevenLabs ToolRequestModel.""" client_config = ToolRequestModelToolConfig_Client( type="client", @@ -94,6 +98,8 @@ def convert_tool(tool: dict) -> ToolRequestModel: description=f"{tool['name']}: {tool['description']}", expects_response=True, parameters=build_parameters(tool), + pre_tool_speech=pre_tool_speech, + execution_mode=execution_mode, ) return ToolRequestModel(tool_config=client_config) @@ -104,6 +110,18 @@ def main(): parser.add_argument("--agent-id", default="", help="ElevenLabs agent ID") parser.add_argument("--domain", default="airline", help="Agent domain name (e.g. airline, itsm, medical_hr)") parser.add_argument("--config", default=None, help="Path to agent YAML config (overrides --domain)") + parser.add_argument( + "--pre-tool-speech", + default="force", + choices=["auto", "force", "off"], + help="Pre-tool speech mode (default: force)", + ) + parser.add_argument( + "--execution-mode", + default="immediate", + choices=["immediate", "post_tool_speech", "async"], + help="Tool execution mode (default: immediate)", + ) parser.add_argument("--dry-run", action="store_true", help="Print tool configs without creating them") args = parser.parse_args() @@ -113,7 +131,7 @@ def main(): if args.dry_run: for tool in tools: - request_model = convert_tool(tool) + request_model = convert_tool(tool, pre_tool_speech=args.pre_tool_speech, execution_mode=args.execution_mode) tool_cfg = request_model.tool_config print(f"\n--- {tool_cfg.name} ---") print(f" description: {tool_cfg.description}") From 11295348ea1b7df7301141fd3910f8339be28b99 Mon Sep 17 00:00:00 2001 From: Katrina Date: Fri, 8 May 2026 13:01:44 -0700 Subject: [PATCH 3/3] Revert "update elevenlabs tool script to control pre-tool speech and execution mode" This reverts commit fba1630e496d603011d7be1b0d2415183c39ae39. --- scripts/create_elevenlabs_tools.py | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/scripts/create_elevenlabs_tools.py b/scripts/create_elevenlabs_tools.py index 6d98614c..371406d9 100644 --- a/scripts/create_elevenlabs_tools.py +++ b/scripts/create_elevenlabs_tools.py @@ -86,11 +86,7 @@ def build_parameters(tool: dict) -> ObjectJsonSchemaPropertyInput: ) -def convert_tool( - tool: dict, - pre_tool_speech: str = "force", - execution_mode: str = "immediate", -) -> ToolRequestModel: +def convert_tool(tool: dict) -> ToolRequestModel: """Convert a YAML tool definition to an ElevenLabs ToolRequestModel.""" client_config = ToolRequestModelToolConfig_Client( type="client", @@ -98,8 +94,6 @@ def convert_tool( description=f"{tool['name']}: {tool['description']}", expects_response=True, parameters=build_parameters(tool), - pre_tool_speech=pre_tool_speech, - execution_mode=execution_mode, ) return ToolRequestModel(tool_config=client_config) @@ -110,18 +104,6 @@ def main(): parser.add_argument("--agent-id", default="", help="ElevenLabs agent ID") parser.add_argument("--domain", default="airline", help="Agent domain name (e.g. airline, itsm, medical_hr)") parser.add_argument("--config", default=None, help="Path to agent YAML config (overrides --domain)") - parser.add_argument( - "--pre-tool-speech", - default="force", - choices=["auto", "force", "off"], - help="Pre-tool speech mode (default: force)", - ) - parser.add_argument( - "--execution-mode", - default="immediate", - choices=["immediate", "post_tool_speech", "async"], - help="Tool execution mode (default: immediate)", - ) parser.add_argument("--dry-run", action="store_true", help="Print tool configs without creating them") args = parser.parse_args() @@ -131,7 +113,7 @@ def main(): if args.dry_run: for tool in tools: - request_model = convert_tool(tool, pre_tool_speech=args.pre_tool_speech, execution_mode=args.execution_mode) + request_model = convert_tool(tool) tool_cfg = request_model.tool_config print(f"\n--- {tool_cfg.name} ---") print(f" description: {tool_cfg.description}")