1. 04 Jun, 2025 6 commits
    • feat(ui): Enhance model tag rendering in logs table with icons · f2bca12d
      Improve the logs table by implementing brand-specific model icons and better
      redirection visualization:
      
      - Replace standard tags with `renderModelTag` to display appropriate brand
        icons for each model (OpenAI, Claude, Gemini, etc.)
      - Fix background colors by explicitly passing color parameters
      - Restore descriptive text for model redirection in popover
      - Replace refresh icon with forward icon for better representation of model
        redirection
      - Clean up unused imports
      
      This change provides a more intuitive visual representation of models and
      their relationships, making the logs table easier to understand at a glance.
      Apple\Apple committed
    • 💅 feat(ui): Remove fixed width constraints from model pricing table · 56491f4d
      This commit removes all fixed width constraints from the model pricing table columns, allowing them to naturally expand and adjust based on content. This improves the table's responsiveness and ensures better space utilization across different screen sizes.
      Apple\Apple committed
    • feat(ui): add the attribute `mode="password"` to the password input on the… · 3feed086
       feat(ui): add the attribute `mode="password"` to the password input on the Setup page to enable password visibility toggle
      Apple\Apple committed
    • Refactor: Conditionally render OAuth options in login and registration forms · 80d43b00
      This commit refactors the login and registration forms to enhance user experience by conditionally displaying OAuth-related UI elements.
      
      - In `LoginForm.js` and `RegisterForm.js`:
          - The "Other login/registration options" button and the "or" divider are now only displayed if at least one OAuth provider is enabled in the system settings.
          - This change ensures a cleaner interface when no OAuth options are configured, preventing user confusion.
      - In `RegisterForm.js`:
          - Changed `div` class from `relative` to `min-h-screen relative` to ensure the registration form an take up the entire screen height.
      Apple\Apple committed
    • 🎨 refactor(ui): modernize setup page · 618ed976
      - Refactored system initialization page using TailwindCSS 3 and SemiUI components
      - Changed layout from step navigation to single page display for all configurations
      - Modified top area from vertical to more compact horizontal layout
      - Updated gradient color scheme from blue/purple to orange/pink
      - Fixed form field name duplication issues and optimized Form implementation
      - Changed usage mode selection from three-column grid to vertical layout
      - Replaced usage mode card icons from settings to more appropriate Layers icon
      - Added specific prompts for different database types (SQLite/MySQL/PostgreSQL)
      - Removed configuration summary section while keeping the initialization button
      - Fixed useSetupCheck issue by using SetupCheck as a direct component for proper redirection
      Apple\Apple committed
  2. 03 Jun, 2025 19 commits
  3. 02 Jun, 2025 15 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
    • 🐛 fix(playground): ensure chat interface refreshes when resetting imported messages · 36a9781d
      When using the "reset messages simultaneously" option during config import,
      the conversation messages in the chat interface were not being properly reset,
      while normal conversation resets worked correctly.
      
      **Changes:**
      - Modified `handleConfigReset` in `usePlaygroundState.js` to clear messages
        before setting default examples
      - Added asynchronous message update to force Chat component re-render
      - Ensures immediate UI refresh when resetting imported conversation data
      
      **Root Cause:**
      The direct assignment to DEFAULT_MESSAGES didn't trigger a complete
      component refresh, causing the chat interface to display stale data.
      
      **Solution:**
      ```javascript
      // Before
      setMessage(DEFAULT_MESSAGES);
      
      // After
      setMessage([]);
      setTimeout(() => {
        setMessage(DEFAULT_MESSAGES);
      }, 0);
      ```
      
      This two-step approach forces the Chat component to unmount and remount
      with fresh data, resolving the display inconsistency.
      Apple\Apple committed
    • Merge pull request #1139 from RedwindA/gemini-fix · c668362f
      feat: 增加对Gemini MimeType类型的验证
      Calcium-Ion committed
    • Merge pull request #1140 from RedwindA/gemini-tool-fix · 326bd4d9
      fix: 完善Gemini渠道对tools中additionalProperties的清理
      Calcium-Ion committed
    • Merge pull request #1141 from xqx121/patch-1 · 16f49cfe
      Fix: The edit interface is not billed (usage-based pricing).
      Calcium-Ion committed
    • 🐛fix: Fix message saving missing the last conversation · e9b74651
      - Modify saveMessagesImmediately to accept messages parameter
      - Pass updated message list to all save calls instead of relying on closure
      - Ensure complete message history is saved including the last message
      - Fix timing issue where old message state was being saved
      
      This fixes the issue where the last conversation was not being persisted to localStorage.
      Apple\Apple committed