acoustic-guitar-10279
08/09/2025, 6:03 AMtall-airline-16756
08/09/2025, 6:03 AMtall-airline-16756
08/09/2025, 6:04 AMgenerate_reply
instance in LiveKit, here are a couple of easy ways to do it:
1. Interrupt the Session: Just call the interrupt()
method on your AgentSession
. This will immediately stop any speech that’s happening and all related processes.
session.interrupt()
2. Stop Response in `on_user_turn_completed`: You can raise a StopResponse()
exception inside the on_user_turn_completed
callback to stop the reply when certain conditions are met—like if the user input is empty.
async def on_user_turn_completed(self, turn_ctx: ChatContext, new_message: ChatMessage) -> None:
if not new_message.text_content:
raise StopResponse()
Pick whichever method feels like the best fit for what you’re working on!
Sources: livekit-agents/livekit/agents/voice/agent_activity.py | Pipeline nodes and hooks | LiveKit Docs | home_assistant/homeautomation.pyacoustic-guitar-10279
08/09/2025, 6:58 AMtall-airline-16756
08/09/2025, 6:58 AMtext_enabled=False
in the RoomInputOptions
when you start the agent session. This way, no text input (including STT transcriptions) gets processed.
session = AgentSession(
room_input_options=RoomInputOptions(
text_enabled=False
)
)
2. Use Manual Turn Detection: Take control of when the agent listens by using manual turn detection. You can start and stop listening exactly when you want through RPC methods.
session = AgentSession(turn_detection="manual")
# Example for starting and stopping turns
@ctx.room.local_participant.register_rpc_method("start_turn")
async def start_turn(data):
session.input.set_audio_enabled(True) # Start listening
@ctx.room.local_participant.register_rpc_method("end_turn")
async def end_turn(data):
session.input.set_audio_enabled(False) # Stop listening
3. Disable STT Completely: Simply leave STT out of your agent configuration to make sure no audio input gets transcribed or sent to the LLM.
Pick whichever method feels right for you! And if you want a hand setting it up or have any questions, just let me know—I’m here to help.
Sources: Text and transcriptions | LiveKit Docs | Turn detection and interruptions | LiveKit Docs | basics/interrupts_user.pyacoustic-guitar-10279
08/11/2025, 7:07 AMtall-airline-16756
08/11/2025, 7:07 AMllm_node
to always run a function_tool
in LiveKit, just set tool_choice='required'
when you initialize your LLM. This way, it makes sure to use tools whenever they’re available—pretty handy, right?
Here’s a quick example:
from livekit.agents import function_tool, Agent, RunContext
class MyAgent(Agent):
@function_tool()
async def my_function(self, context: RunContext, argument: str) -> str:
"""Description of what your function does."""
# Implement your function logic here
return "Function executed successfully."
def __init__(self):
super().__init__(
instructions="...",
llm=openai.LLM(model="gpt-4", tool_choice="required") # Forces tool execution
)
With this setup, the LLM will focus on running tools instead of just generating text. If you have any questions or want me to walk you through it, just let me know—I’m here to help!acoustic-guitar-10279
08/11/2025, 7:08 AMtall-airline-16756
08/11/2025, 7:09 AMllm_node
to run a specific function_tool
, here’s a simple step-by-step guide:
1. Define Your Function Tool: Start by using the @function_tool
decorator to create your tool.
from livekit.agents.llm import function_tool
@function_tool()
async def my_functiontool(some_arg: str) -> str:
"""Description of what the function tool does."""
return result
2. Add the Function Tool to the Agent: You can add it right when you initialize your agent:
`from livekit.agents import Agent
agent = Agent(
instructions="Your agent instructions",
tools=[my_functiontool]
)`Or, if you prefer, you can add it later on dynamically using `agent.update_tools()`:
await agent.update_tools([my_functiontool])
3. Make Sure the LLM Node Uses the Tool: The LLM node will pick up and use any tools added to the agent automatically. You can also give it a little nudge in the system prompt:
system_prompt = """
You are a helpful assistant that can use the following functions:
- my_functiontool: {description of what it does}
"""
With this setup, your LLM will use the function tool whenever it makes sense. If you have any questions or want me to walk you through any part, just let me know—I’m here to help!