1. 04 Jun, 2025 13 commits
  2. 03 Jun, 2025 19 commits
  3. 02 Jun, 2025 8 commits
    • 🔧 refactor(preview): remove default placeholder message from empty conversation preview · 42598feb
      - Remove automatic insertion of "你好" placeholder message in preview payload
      - Keep messages array empty when no user messages exist in conversation
      - Only process image handling logic when user messages are present
      - Ensure preview request body accurately reflects current conversation state
      
      Previously, the preview panel would automatically inject a default "你好"
      user message when the conversation was empty, which could be misleading.
      This change ensures the preview payload shows exactly what would be sent
      based on the current conversation state, improving accuracy and user
      understanding of the actual API request structure.
      Apple\Apple committed
    • feat(ui): add clear conversation button to input area with symmetric layout · 3f142ba4
      - Add clear context button positioned on the left side of input area
      - Create symmetric layout with clear button (left) and send button (right)
      - Standardize both buttons to 32x32px size for consistent appearance
      - Apply distinct styling: gray background for clear (red on hover), purple for send
      - Add smooth transition animations for better user experience
      - Align buttons vertically centered for improved visual balance
      
      The clear conversation button provides quick access to context clearing
      functionality directly from the input area, matching the design patterns
      shown in Semi Design documentation and improving overall user workflow.
      Apple\Apple committed
    • 🐛 fix(message): ensure retry uses current selected model instead of stale one · b924cab0
      - Add onMessageReset reference comparison to OptimizedMessageActions memo
      - Force component re-render when model selection changes
      - Prevent stale closure issue in retry functionality
      - Ensure first retry attempt uses newly selected model
      
      Previously, when changing the model selection, the retry button would
      still use the previous model due to React memo optimization preventing
      re-renders. By comparing the onMessageReset callback reference, the
      component now properly updates when the model changes, ensuring the
      retry functionality immediately uses the currently selected model.
      Apple\Apple committed
    • 🐛 fix(message): prevent history loss when editing messages with duplicate IDs · 6df7017d
      - Store editing message object reference using useRef to avoid ID conflicts
      - Use object reference comparison first before falling back to ID matching
      - Apply fix to both save and cancel operations in message editing
      - Clear reference after edit completion to prevent stale object issues
      
      Previously, when editing imported messages that contained duplicate IDs,
      the findIndex operation would match the first occurrence rather than the
      intended message, causing conversation history truncation when saving
      edits. This change stores and uses object references for accurate message
      identification during the editing process.
      Apple\Apple committed
    • 🐛 fix(message): prevent history loss when retrying imported messages with duplicate IDs · a18e90fe
      - Use object reference comparison first before falling back to ID matching
      - Prevent incorrect message index lookup when duplicate IDs exist
      - Apply fix to both handleMessageReset and handleMessageDelete functions
      - Maintain backward compatibility with ID-based message identification
      
      Previously, when importing messages that contained duplicate IDs, the
      findIndex operation would match the first occurrence rather than the
      intended message, causing history truncation on retry. This change uses
      object reference comparison as the primary method, ensuring accurate
      message identification and preserving conversation history.
      Apple\Apple committed
    • 🐛 fix(message): enable retry functionality for system role messages · 59d1f76d
      - Extend handleMessageReset condition to include 'system' role messages
      - Allow system messages to trigger regeneration like assistant messages
      - Fix disabled retry button issue when message role is switched to system
      - Maintain consistent user experience across different message roles
      
      Previously, when an assistant message was switched to system role,
      the retry button became non-functional. This change ensures that
      system messages can be regenerated by finding the previous user
      message and resending it, maintaining feature parity with assistant
      messages.
      Apple\Apple committed
    • feat(ui): enhance fade-in animation effect for streaming text rendering · 2db2bbc6
      - Add multi-dimensional animation with translateY, scale, and blur transforms
      - Introduce 60% keyframe for smoother animation progression
      - Extend animation duration from 0.4s to 0.6s for better visual impact
      - Apply cubic-bezier(0.22, 1, 0.36, 1) easing for more natural motion
      - Add will-change property to optimize rendering performance
      - Improve perceived responsiveness during AI response streaming
      
      The enhanced animation now provides a more polished and engaging user
      experience when AI responses are being streamed, with text appearing
      smoothly from bottom-up with subtle scaling and blur effects.
      Apple\Apple committed
    • 🔧 fix(playground): resolve message state issues after page refresh and config reset · 70409860
      **Problem 1: Chat interface not refreshing when resetting imported messages**
      - The "reset messages simultaneously" option during config import failed to
        update the chat interface properly
      - Normal conversation resets worked correctly
      
      **Problem 2: Messages stuck in loading state after page refresh**
      - When AI was generating a response and user refreshed the page, the message
        remained in loading state indefinitely
      - Stop button had no effect on these orphaned loading messages
      
      **Changes Made:**
      
      1. **Fixed config reset message refresh** (`usePlaygroundState.js`):
         ```javascript
         // Clear messages first, then set defaults to force component re-render
         setMessage([]);
         setTimeout(() => {
           setMessage(DEFAULT_MESSAGES);
         }, 0);
         ```
      
      2. **Enhanced stop generator functionality** (`useApiRequest.js`):
         ```javascript
         // Handle orphaned loading messages even without active SSE connection
         const onStopGenerator = useCallback(() => {
           // Close active SSE if exists
           if (sseSourceRef.current) {
             sseSourceRef.current.close();
             sseSourceRef.current = null;
           }
      
           // Always attempt to complete any loading/incomplete messages
           // ... processing logic
         }, [setMessage, applyAutoCollapseLogic, saveMessages]);
         ```
      
      3. **Added automatic message state recovery** (`usePlaygroundState.js`):
         ```javascript
         // Auto-fix loading/incomplete messages on page load
         useEffect(() => {
           const lastMsg = message[message.length - 1];
           if (lastMsg.status === MESSAGE_STATUS.LOADING ||
               lastMsg.status === MESSAGE_STATUS.INCOMPLETE) {
             // Process incomplete content and mark as complete
             // Save corrected message state
           }
         }, []);
         ```
      
      **Root Cause:**
      - Config reset: Direct state assignment didn't trigger component refresh
      - Loading state: No recovery mechanism for interrupted SSE connections after refresh
      
      **Impact:**
      -  Config reset now properly refreshes chat interface
      -  Stop button works on orphaned loading messages
      -  Page refresh automatically recovers incomplete messages
      -  No more permanently stuck loading states
      Apple\Apple committed