Markus Clauss DIRU Vetsuisse Claude commited on
Commit
540fde3
·
1 Parent(s): f538304

Properly implement thinking states with both visual and text feedback

Browse files

- Use thinking array for visual spinner/animation from component
- Show dialect-specific thinking messages alongside visual indicator
- Properly manage currentSpeaker and thinking states per API spec
- Clear thinking state when speaker becomes active

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

Files changed (1) hide show
  1. app.py +13 -9
app.py CHANGED
@@ -278,8 +278,6 @@ UNTERSCHIEDE: [Konkrete Meinungsunterschiede]"""
278
  def update_visual_state(self, **kwargs):
279
  """Update the visual roundtable state"""
280
  self.roundtable_state.update(kwargs)
281
- # Ensure thinking is always empty to avoid generic "is thinking" messages
282
- self.roundtable_state["thinking"] = []
283
  return json.dumps(self.roundtable_state)
284
 
285
  def run_discussion_round(self):
@@ -293,12 +291,13 @@ UNTERSCHIEDE: [Konkrete Meinungsunterschiede]"""
293
 
294
  # Each member speaks once per round
295
  for member_name in COUNCIL_MEMBERS.keys():
296
- # Add custom thinking message instead of using thinking state
297
  member = COUNCIL_MEMBERS[member_name]
298
  thinking_msg = member.get("thinking_message", "denkt nach...")
299
 
300
- # Show thinking message as a status
301
- self.roundtable_state["currentSpeaker"] = member_name
 
 
302
  self.roundtable_state["messages"].append({
303
  "speaker": member_name,
304
  "text": f"{member['emoji']} *{thinking_msg}*"
@@ -310,7 +309,9 @@ UNTERSCHIEDE: [Konkrete Meinungsunterschiede]"""
310
  # Generate response
311
  response = self.generate_response(member_name, self.current_topic, responses)
312
 
313
- # Remove thinking message and add real response
 
 
314
  self.roundtable_state["messages"][-1] = {
315
  "speaker": member_name,
316
  "text": f"{member['emoji']} {response}"
@@ -336,8 +337,9 @@ UNTERSCHIEDE: [Konkrete Meinungsunterschiede]"""
336
  time.sleep(2)
337
 
338
  # Generate moderator summary
339
- # Show moderator thinking
340
- self.roundtable_state["currentSpeaker"] = "Dr. Müller"
 
341
  self.roundtable_state["messages"].append({
342
  "speaker": "Dr. Müller",
343
  "text": "🎓 *analysiert die Diskussion...*"
@@ -348,7 +350,9 @@ UNTERSCHIEDE: [Konkrete Meinungsunterschiede]"""
348
 
349
  moderator_summary, self.consensus_score = self.generate_moderator_summary(responses)
350
 
351
- # Replace thinking message with real summary
 
 
352
  self.roundtable_state["messages"][-1] = {
353
  "speaker": "Dr. Müller",
354
  "text": f"🎓 {moderator_summary}"
 
278
  def update_visual_state(self, **kwargs):
279
  """Update the visual roundtable state"""
280
  self.roundtable_state.update(kwargs)
 
 
281
  return json.dumps(self.roundtable_state)
282
 
283
  def run_discussion_round(self):
 
291
 
292
  # Each member speaks once per round
293
  for member_name in COUNCIL_MEMBERS.keys():
 
294
  member = COUNCIL_MEMBERS[member_name]
295
  thinking_msg = member.get("thinking_message", "denkt nach...")
296
 
297
+ # Show thinking state with visual indicator
298
+ self.roundtable_state["thinking"] = [member_name]
299
+ self.roundtable_state["currentSpeaker"] = None
300
+ # Also add dialect-specific thinking message
301
  self.roundtable_state["messages"].append({
302
  "speaker": member_name,
303
  "text": f"{member['emoji']} *{thinking_msg}*"
 
309
  # Generate response
310
  response = self.generate_response(member_name, self.current_topic, responses)
311
 
312
+ # Clear thinking, set as current speaker, update message
313
+ self.roundtable_state["thinking"] = []
314
+ self.roundtable_state["currentSpeaker"] = member_name
315
  self.roundtable_state["messages"][-1] = {
316
  "speaker": member_name,
317
  "text": f"{member['emoji']} {response}"
 
337
  time.sleep(2)
338
 
339
  # Generate moderator summary
340
+ # Show moderator thinking with visual indicator
341
+ self.roundtable_state["thinking"] = ["Dr. Müller"]
342
+ self.roundtable_state["currentSpeaker"] = None
343
  self.roundtable_state["messages"].append({
344
  "speaker": "Dr. Müller",
345
  "text": "🎓 *analysiert die Diskussion...*"
 
350
 
351
  moderator_summary, self.consensus_score = self.generate_moderator_summary(responses)
352
 
353
+ # Clear thinking, set as speaker, update message
354
+ self.roundtable_state["thinking"] = []
355
+ self.roundtable_state["currentSpeaker"] = "Dr. Müller"
356
  self.roundtable_state["messages"][-1] = {
357
  "speaker": "Dr. Müller",
358
  "text": f"🎓 {moderator_summary}"