Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions livekit-agents/livekit/agents/beta/tools/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
from .end_call import EndCallTool
from .send_dtmf import send_dtmf_events
from .speak_to_ivr import speak_to_ivr

__all__ = [
"EndCallTool",
"send_dtmf_events",
"speak_to_ivr",
]
17 changes: 17 additions & 0 deletions livekit-agents/livekit/agents/beta/tools/speak_to_ivr.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from ... import StopResponse, function_tool
from ...voice.events import RunContext


@function_tool
async def speak_to_ivr(ctx: RunContext, text: str) -> None:
"""
Speak a specific phrase to the IVR using voice.

Use when the IVR asks you to say something verbally rather than press keys —
e.g., your name, "yes", "no", or any spoken menu option.
After speaking, yields the turn back to the IVR to listen for its reply.
"""
handle = ctx.session.say(text, allow_interruptions=False)
await ctx.wait_for_playout()
await handle
raise StopResponse()
3 changes: 2 additions & 1 deletion livekit-agents/livekit/agents/voice/ivr/ivr_activity.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,9 @@ async def start(self) -> None:
@property
def tools(self) -> list[llm.FunctionTool | llm.RawFunctionTool]:
from ...beta.tools.send_dtmf import send_dtmf_events
from ...beta.tools.speak_to_ivr import speak_to_ivr

return [send_dtmf_events]
return [send_dtmf_events, speak_to_ivr]

def _on_user_input_transcribed(self, ev: UserInputTranscribedEvent) -> None:
if not ev.is_final:
Expand Down
Loading