Skip to content

Make UserIdleController always-on with dynamic timeout updates#3748

Merged
aconchillo merged 1 commit intomainfrom
mb/user-idle-configurable
Feb 19, 2026
Merged

Make UserIdleController always-on with dynamic timeout updates#3748
aconchillo merged 1 commit intomainfrom
mb/user-idle-configurable

Conversation

@markbackman
Copy link
Copy Markdown
Contributor

@markbackman markbackman commented Feb 14, 2026

Context

In thinking about the issue filed in #3742, I realized that there are likely cases where you want to enable and disable the UserIdleController conditionally. Or, change the response time. I'm surprised we haven't had this request before, but it will make the UserIdleController more flexible to include in application code.

Summary

  • Always create UserIdleController with timeout=0 (disabled) by default, removing all Optional type annotations and if self._user_idle_controller: guards from UserTurnProcessor and LLMUserAggregator
  • Add UserIdleTimeoutUpdateFrame to allow enabling/disabling idle detection at runtime by updating the timeout dynamically
  • Add tests for disabled-by-default, enable-via-frame, and disable-via-frame scenarios

Test plan

  • uv run pytest tests/test_user_idle_controller.py — all 12 tests pass (9 existing + 3 new)
  • uv run ruff check — no lint issues

🤖 Generated with Claude Code

markbackman added a commit that referenced this pull request Feb 14, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented Feb 14, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

Files with missing lines Coverage Δ
src/pipecat/frames/frames.py 89.37% <100.00%> (+0.04%) ⬆️
...t/processors/aggregators/llm_response_universal.py 79.68% <100.00%> (+1.08%) ⬆️
src/pipecat/turns/user_idle_controller.py 98.27% <100.00%> (+2.19%) ⬆️
src/pipecat/turns/user_turn_processor.py 93.15% <100.00%> (+8.15%) ⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Always create UserIdleController (timeout=0 means disabled), removing
all Optional guards. Add UserIdleTimeoutUpdateFrame to allow changing
the idle timeout at runtime.
@markbackman markbackman force-pushed the mb/user-idle-configurable branch from c722caa to 5077656 Compare February 14, 2026 14:54
@markbackman markbackman requested review from aconchillo, filipi87 and kompfner and removed request for kompfner February 14, 2026 14:55
Base automatically changed from mb/user-idle-timeout-frame to main February 19, 2026 19:34
@aconchillo
Copy link
Copy Markdown
Contributor

Nice!

@aconchillo aconchillo merged commit 474b273 into main Feb 19, 2026
6 checks passed
@aconchillo aconchillo deleted the mb/user-idle-configurable branch February 19, 2026 19:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants