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>
    	
        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  | 
| 301 | 
            -
                        self.roundtable_state[" | 
|  | |
|  | |
| 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 | 
            -
                        #  | 
|  | |
|  | |
| 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[" | 
|  | |
| 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 | 
            -
                    #  | 
|  | |
|  | |
| 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}"
         | 
