# How to commit user turn without generating a response?

**URL:** <https://community.livekit.io/t/how-to-commit-user-turn-without-generating-a-response/433>\
**Category:** Agents\
**Tags:** stt, turn-detection\
**Created:** [March 2, 2026, 11:34am UTC](https://community.livekit.io/t/how-to-commit-user-turn-without-generating-a-response/433 "2026-03-02T11:34:23Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Benjamin\_Lowe](https://sea1.discourse-cdn.com/flex001/user_avatar/community.livekit.io/benjamin_lowe/32/314_2.png) [@Benjamin\_Lowe](https://community.livekit.io/u/Benjamin_Lowe)\
**Post date:** [March 2, 2026, 11:34am UTC](https://community.livekit.io/t/how-to-commit-user-turn-without-generating-a-response/433/1 "2026-03-02T11:34:23Z")

</div>

When using a cascaded approach (STT –\> LLM –\> TTS) and manual turn taking like [Turns overview | LiveKit Documentation](https://docs.livekit.io/agents/logic/turns/#manual) .

I would like to simply commit the current user turn (i.e. flush the STT transcript etc. to local context) but _not_ trigger a response.

It seems `session.commit_user_turn()` generates a reply by default and I cannot see an idiomatic way to do all the boilerplate of commiting a user turn without a response - is there one? If not, I’d like to make a feature request for that.

e.g. maybe an argument `session.commit_user_turn(request_agent_response=False)` which defaults to True.

Thanks for any assistance!

---

<div class="post-metadata">

**Author:** ![CWilson](https://sea1.discourse-cdn.com/flex001/user_avatar/community.livekit.io/cwilson/32/135_2.png) [@CWilson](https://community.livekit.io/u/CWilson)\
**Post date:** [March 3, 2026, 1:33am UTC](https://community.livekit.io/t/how-to-commit-user-turn-without-generating-a-response/433/2 "2026-03-03T01:33:36Z")

</div>

If you want to flush STT/transcript state into your local context without generating a reply, you need to bypass `commit_user_turn()` and manage that state yourself (e.g., by consuming transcripts via events or pipeline hooks and updating your own context store).

---

<div class="post-metadata">

**Author:** ![Benjamin\_Lowe](https://sea1.discourse-cdn.com/flex001/user_avatar/community.livekit.io/benjamin_lowe/32/314_2.png) [@Benjamin\_Lowe](https://community.livekit.io/u/Benjamin_Lowe)\
**Post date:** [March 3, 2026, 2:15pm UTC](https://community.livekit.io/t/how-to-commit-user-turn-without-generating-a-response/433/3 "2026-03-03T14:15:16Z")

</div>

My goal would be to update the livekit local context in the normal way (so that all the livekit features work naturally, like conversation added event hooks, clearing the STT and transcript buffer etc.) - the only thing I do not need is to pass this to the LLM to get a response.

> If you want to flush STT/transcript state into your local context without generating a reply, you need to bypass `commit_user_turn()` and manage that state yourself (e.g., by consuming transcripts via events or pipeline hooks and updating your own context store).

I could consume the transcript creation event and manually add it to the local context maybe like

```python
@self._session.on("user_input_transcribed")
...

        agent = session.current_agent
        agent._chat_ctx.items.append(chat_msg)
        session._conversation_item_added(chat_msg)

```

But how best I grab “flush” the STT to get the latest available transcript as input - I believe that is what commit\_user\_turn() does but we do not need the automatic-response-generation that comes with it.

To give a little more context, we have a situation in manual turn taking where we need to force the user to give up their turn and get the agent to “say” something specific - so in this case, we do not want to trigger the agent to say anything because we already have triggered it elsewhere to say something, but we do wish to commit the currently pending transcript/STT buffer to local context.

Another idea would be to do

1. `commit_user_turn()`
2. session.interupt()
3. generate agent speech

But as it says here [Search | DeepWiki](https://deepwiki.com/search/if-i-call-in-python-sdk-commit_7c5b385d-d4b7-41f7-b80c-b8630a046f19?mode=fast) I think that would not be bulletproof either as its possible to interrupt before the LLM request starts making the interrupt a no-op.

---

<div class="post-metadata">

**Author:** ![CWilson](https://sea1.discourse-cdn.com/flex001/user_avatar/community.livekit.io/cwilson/32/135_2.png) [@CWilson](https://community.livekit.io/u/CWilson)\
**Post date:** [March 3, 2026, 3:51pm UTC](https://community.livekit.io/t/how-to-commit-user-turn-without-generating-a-response/433/4 "2026-03-03T15:51:27Z")

</div>

I will bring this up with the team

---

<div class="post-metadata">

**Author:** ![Benjamin\_Lowe](https://sea1.discourse-cdn.com/flex001/user_avatar/community.livekit.io/benjamin_lowe/32/314_2.png) [@Benjamin\_Lowe](https://community.livekit.io/u/Benjamin_Lowe)\
**Post date:** [March 5, 2026, 2:04pm UTC](https://community.livekit.io/t/how-to-commit-user-turn-without-generating-a-response/433/5 "2026-03-05T14:04:37Z")

</div>

@CWilson thanks for your help on this, did you get a chance to get any feedback from the team? Maybe I should make a “Feature request” issue

---

<div class="post-metadata">

**Author:** ![CWilson](https://sea1.discourse-cdn.com/flex001/user_avatar/community.livekit.io/cwilson/32/135_2.png) [@CWilson](https://community.livekit.io/u/CWilson)\
**Post date:** [March 5, 2026, 2:16pm UTC](https://community.livekit.io/t/how-to-commit-user-turn-without-generating-a-response/433/6 "2026-03-05T14:16:44Z")

</div>

I think a feature request (or PR) would be greate. That is essentially what I did internally but I think have something externally trackable would be helpful.

---

<div class="post-metadata">

**Author:** ![Benjamin\_Lowe](https://sea1.discourse-cdn.com/flex001/user_avatar/community.livekit.io/benjamin_lowe/32/314_2.png) [@Benjamin\_Lowe](https://community.livekit.io/u/Benjamin_Lowe)\
**Post date:** [March 6, 2026, 2:55pm UTC](https://community.livekit.io/t/how-to-commit-user-turn-without-generating-a-response/433/7 "2026-03-06T14:55:07Z")

</div>

> [@Benjamin\_Lowe](#):
>
> But as it says here [Search | DeepWiki](https://deepwiki.com/search/if-i-call-in-python-sdk-commit_7c5b385d-d4b7-41f7-b80c-b8630a046f19?mode=fast) I think that would not be bulletproof either as its possible to interrupt before the LLM request starts making the interrupt a no-op

> <https://github.com/livekit/agents/issues/5026>
>
> \### Feature Type
> 
> Would make my life easier
> 
> \### Feature Description
> 
> This is a …feature request for https://community.livekit.io/t/how-to-commit-user-turn-without-generating-a-response/433
> 
> \- We are using manual turn taking (https://docs.livekit.io/agents/logic/turns/#manual)
> \- We are using cascaded models (STT/LLM/TTS)
> \- Currently when commit\_user\_turn() is called it always triggers a response from the model automatically 
> 
> We need to force the user to give up their turn and get the agent to “say” something specific - so in this case, we \_do not want to trigger the agent to say anything\_ automatically when we end the user turn and call commit\_user\_turn().
> 
> We need to call commit\_user\_turn() though because we need to commit the user's latest speech from the STT (i.e. buffered transcript) into the livekit local state so the LLM is aware of it before the user next ends their turn. i.e. we do not wish to discard the users latest speech whenever the agent interrupts their turn. 
> 
> Ideally we could do something like \`commit\_user\_turn(skip\_reply=False)\`
> 
> \### Workarounds / Alternatives
> 
> We could manually commit it to local state i.e. consume the transcript creation event and manually add it to the local context maybe like
> 
> \`\`\`
> @self.\_session.on("user\_input\_transcribed")
> ...
> agent = session.current\_agent
> agent.\_chat\_ctx.items.append(chat\_msg)
> session.\_conversation\_item\_added(chat\_msg)
> \`\`\`
> like this, but the problem would be I do not know how to “flush” the STT to get the latest available transcript as input to this.  
> 
> Another idea would be to do
> 
> \`\`\`
> commit\_user\_turn()
> session.interupt()
> generate agent speech
> \`\`\`
> 
> But as it says here \[Search | DeepWiki\](https://deepwiki.com/search/if-i-call-in-python-sdk-commit\_7c5b385d-d4b7-41f7-b80c-b8630a046f19?mode=fast) I think that would not be bulletproof either as its possible to interrupt before the LLM request starts making the interrupt a no-op
> 
> 
> \### Additional Context
> 
> \_No response\_
