Agents in MODUS v9.5.0 are giving static, pre-scripted responses instead of dynamic LLM-generated conversations, making them appear less "conscious" and more like chatbots.
User Input β LiveView β WorldChannel β Protocol.Bridge β LlmProvider β Response
File: /lib/modus/protocol/bridge.ex
Function: process/3
Critical Finding: Multiple fallback layers cause static responses:
- Rate Limiting Check (Line 60-62):
rate_limited?(agent_id) ->
{:ok, "*#{agent_name} holds up a hand, still thinking about the last thing you said.*"}- Issue: 3-second rate limit per agent
- Impact: With 3,449 agents and user interactions, high chance of rate limiting
- User Experience: Appears as broken/robotic behavior
- LLM Failure Cascade (Lines 234-263):
case config.provider do
:gemini -> GeminiClient.chat_completion_direct(messages, config)
# If fails β Gemini direct fallback
# If fails β hardcoded fallback_reply(agent)
endStatic Response Patterns Found:
- personality_fallback/1 (Lines 277-308):
# Extraversion-based responses
extraversion < 0.3 -> "*#{name} looks at you thoughtfully but says nothing.*"
current_action in [:gathering, :exploring] -> "*#{name} seems too focused to respond.*"
neuroticism > 0.7 -> "*#{name} fidgets nervously and doesn't quite manage a response.*"- fallback_reply/1 (Lines 310-375):
def fallback_reply(agent) do
greeting = pick_greeting(personality)
mood = mood_expression(affect_state, needs)
activity = activity_description(current_action, personality)
"#{greeting} #{mood} #{activity}"
end-
Scale Performance Issues:
- 3,449 agents overwhelming tick system (226ms vs 10ms target)
- LLM provider rate limits at scale
- Memory pressure affecting response times
-
Aggressive Fallback Logic:
- Rate limiting triggering too frequently
- LLM failure chain too quick to fallback
- No distinction between temporary vs permanent failures
-
Missing Context Awareness:
- Rate limit responses don't consider conversation context
- Fallbacks don't maintain conversation coherence
- No user feedback about system state
- Cache Behavior: 30-second TTL may serve stale responses
- Error Handling: Silent fallbacks mask actual problems
- User Interface: No indication of LLM vs fallback responses
- Tick Lag: 119-226ms (target: 10ms)
- Agent Count: 3,449 active agents
- Rate Limit Window: 3 seconds per agent
- LLM Provider: Gemini API configured
[warning] Tick lag detected: tick #8871580 took 185ms (interval: 10ms, agents: 3449, streak: 1)
[debug] LLM idle skip: 10 agents unchanged, 0 need decisions
[info] MODUS chat_agent received: agent_id=123 message="Hello"
[warning] Bridge: primary LLM failed, trying Gemini direct fallback
- Broken Immersion: Static responses break the illusion of conscious agents
- Inconsistent Behavior: Some agents respond dynamically, others statically
- No Feedback: Users don't understand why agents seem "dumb" sometimes
- Scaling Problems: Current architecture doesn't handle 3k+ agents gracefully
- Observability Gap: No monitoring of LLM success/failure rates
- UX Regression: Fallbacks designed for rare failures now common
-
Rate Limit UX Fix:
# Instead of generic fallback rate_limited?(agent_id) -> {:ok, "*#{agent_name} is still processing your last message... (thinking)*"}
-
LLM Status Indicators:
- Add
response_type: :ai | :fallbackto chat replies - Surface this to UI with visual indicators
- Add
-
Performance Optimization:
- Implement agent hibernation for inactive agents
- Batch LLM requests to reduce API pressure
- Circuit breaker pattern for LLM failures
-
Smart Fallbacks:
- Context-aware fallback responses
- Escalating fallback strategy (cache β personality β static)
- User notification of system issues
- Architecture Improvements:
- Multi-tier agent system (active/inactive/background)
- Distributed LLM provider support
- Advanced caching strategies
- Response Type Tracking: Monitor AI vs fallback ratio
- Performance Profiling: Measure LLM response times under load
- User Testing: A/B test fallback messaging strategies
- Load Testing: Agent count vs chat quality correlation
- LLM response rate >80% (currently estimated <30%)
- Average response time <3 seconds
- User satisfaction with chat interactions
- Tick performance <50ms with 3k+ agents
The "static response problem" is primarily a performance and scale issue, not a fundamental AI capability problem. The Spinoza Mind Engine and conscious chat system are architecturally sound but being overwhelmed by scale.
Priority: Critical - impacts core product value proposition
Complexity: High - requires both performance optimization and UX redesign
Timeline: 3-4 sprints for full resolution with incremental improvements possible
The solution requires both technical optimization and user experience improvements to maintain the illusion of consciousness even when the system is under stress.