1. 07 Aug, 2025 1 commit
    • 🎨 feat(models): add row styling for disabled models in ModelsTable · 1d28e4dd
      Add visual distinction for enabled/disabled models by applying different
      background colors to table rows based on model status. This implementation
      follows the same pattern used in ChannelsTable for consistent user experience.
      
      Changes:
      - Modified handleRow function in useModelsData.js to include row styling
      - Disabled models (status !== 1) now display with gray background using
        --semi-color-disabled-border CSS variable
      - Enabled models (status === 1) maintain normal background color
      - Preserved existing row click selection functionality
      
      This enhancement improves the visual feedback for users to quickly identify
      which models are active vs inactive in the models management interface.
      t0ng7u committed
  2. 05 Aug, 2025 7 commits
    • feat(models): Revamp EditModelModal UI and UX · 029768e8
      This commit significantly refactors the `EditModelModal` component to streamline the user interface and enhance usability, aligning it with the interaction patterns found elsewhere in the application.
      
      - **Consolidated Layout:** Merged the "Vendor Information" and "Feature Configuration" sections into a single "Basic Information" card. This simplifies the form, reduces clutter, and makes all settings accessible in one view.
      
      - **Improved Prefill Groups:** Replaced the separate `Select` dropdowns for tag and endpoint groups with a more intuitive button-based system within the `extraText` of the `TagInput` components.
      
      - **Additive Button Logic:** The prefill group buttons now operate in an additive mode. Users can click multiple group buttons to incrementally add tags or endpoints, with duplicates being automatically handled.
      
      - **Clear Functionality:** Added "Clear" buttons for both tags and endpoints, allowing users to easily reset the fields.
      
      - **Code Cleanup:** Removed the unused `endpointOptions` constant and unnecessary icon imports (`Building`, `Settings`) to keep the codebase clean.
      t0ng7u committed
    • 🚀 refactor: migrate vendor-count aggregation to model layer & align frontend logic · ac054461
      Summary
      • Backend
        – Moved duplicate-name validation and total vendor-count aggregation from controllers (`controller/model_meta.go`, `controller/vendor_meta.go`, `controller/prefill_group.go`) to model layer (`model/model_meta.go`, `model/vendor_meta.go`, `model/prefill_group.go`).
        – Added `GetVendorModelCounts()` and `Is*NameDuplicated()` helpers; controllers now call these instead of duplicating queries.
        – API response for `/api/models` now returns `vendor_counts` with per-vendor totals across all pages, plus `all` summary.
        – Removed redundant checks and unused imports, eliminating `go vet` warnings.
      
      • Frontend
        – `useModelsData.js` updated to consume backend-supplied `vendor_counts`, calculate the `all` total once, and drop legacy client-side counting logic.
        – Simplified initial data flow: first render now triggers only one models request.
        – Deleted obsolete `updateVendorCounts` helper and related comments.
        – Ensured search flow also sets `vendorCounts`, keeping tab badges accurate.
      
      Why
      This refactor enforces single-responsibility (aggregation in model layer), delivers consistent totals irrespective of pagination, and removes redundant client queries, leading to cleaner code and better performance.
      t0ng7u committed
    • 🚀 refactor: refine pricing refresh logic & hide disabled models · cfb5b602
      Summary
      -------
      1. Pricing generation
         • `model/pricing.go`: skip any model whose `status != 1` when building
           `pricingMap`, ensuring disabled models are never returned to the
           front-end.
      
      2. Cache refresh placement
         • `controller/model_meta.go`
           – Removed `model.RefreshPricing()` from pure read handlers
             (`GetAllModelsMeta`, `SearchModelsMeta`).
           – Kept refresh only in mutating handlers
             (`Create`, `Update`, `Delete`), guaranteeing data is updated
             immediately after an admin change while avoiding redundant work
             on every read.
      
      Result
      ------
      Front-end no longer receives information about disabled models, and
      pricing cache refreshes occur exactly when model data is modified,
      improving efficiency and consistency.
      t0ng7u committed
    • feat: enhance soft-delete handling & boost pricing cache performance · d7428227
      Summary
      -------
      This commit unifies soft-delete behaviour across meta tables and
      introduces an in-memory cache for model pricing look-ups to improve
      throughput under high concurrency.
      
      Details
      -------
      Soft-delete consistency
      • PrefillGroup / Vendor / Model
        – Added `gorm.DeletedAt` field with `json:"-" gorm:"index"`.
        – Replaced plain `uniqueIndex` with partial unique indexes
          `uniqueIndex:<name>,where:deleted_at IS NULL`
          allowing duplicate keys after logical deletion while preserving
          uniqueness for active rows.
      • Imports updated to include `gorm.io/gorm`.
      • JSON output now hides `deleted_at`, matching existing tables.
      
      High-throughput pricing cache
      • model/pricing.go
        – Added thread-safe maps `modelEnableGroups` & `modelQuotaTypeMap`
          plus RW-mutex for O(1) access.
        – `updatePricing()` now refreshes these maps alongside `pricingMap`.
      • model/model_extra.go
        – Rewrote `GetModelEnableGroups` & `GetModelQuotaType` to read from
          the new maps, falling back to automatic refresh via `GetPricing()`.
      
      Misc
      • Retained `RefreshPricing()` helper for immediate cache invalidation
        after admin actions.
      • All modified files pass linter; no breaking DB migrations required
        (handled by AutoMigrate).
      
      Result
      ------
      – Soft-delete logic is transparent, safe, and allows record “revival”.
      – Pricing-related queries are now constant-time, reducing CPU usage and
        latency under load.
      t0ng7u committed
    • Merge pull request #1507 from QuantumNous/multi-key-manage · 2286ec06
      feat: implement channel-specific locking for thread-safe polling
      Calcium-Ion committed
  3. 04 Aug, 2025 18 commits
  4. 03 Aug, 2025 7 commits
    • feat: Add prefill group management system for models · 663e25b3
      - Add new PrefillGroup model with CRUD operations
        * Support for model, tag, and endpoint group types
        * JSON storage for group items with GORM datatypes
        * Automatic database migration support
      
      - Implement backend API endpoints
        * GET /api/prefill_group - List groups by type with admin auth
        * POST /api/prefill_group - Create new groups
        * PUT /api/prefill_group - Update existing groups
        * DELETE /api/prefill_group/:id - Delete groups
      
      - Add comprehensive frontend management interface
        * PrefillGroupManagement component for group listing
        * EditPrefillGroupModal for group creation/editing
        * Integration with EditModelModal for auto-filling
        * Responsive design with CardTable and SideSheet
      
      - Enhance model editing workflow
        * Tag group selection with auto-fill functionality
        * Endpoint group selection with auto-fill functionality
        * Seamless integration with existing model forms
      
      - Create reusable UI components
        * Extract common rendering utilities to models/ui/
        * Shared renderLimitedItems and renderDescription functions
        * Consistent styling across all model-related components
      
      - Improve user experience
        * Empty state illustrations matching existing patterns
        * Fixed column positioning for operation buttons
        * Item content display with +x indicators for overflow
        * Tooltip support for long descriptions
      t0ng7u committed
    • 🚀 feat: expose “Enabled Groups” for models with real-time refresh · d70e9a48
      Backend
      • model/model_meta.go
        – Added `EnableGroups []string` to Model struct
        – fillModelExtra now populates EnableGroups
      
      • model/model_groups.go
        – New helper `GetModelEnableGroups` (reuses Pricing cache)
      
      • model/pricing_refresh.go
        – Added `RefreshPricing()` to force immediate cache rebuild
      
      • controller/model_meta.go
        – `GetAllModelsMeta` & `SearchModelsMeta` call `model.RefreshPricing()` before querying, ensuring groups / endpoints are up-to-date
      
      Frontend
      • ModelsColumnDefs.js
        – Added `renderGroups` util and “可用分组” table column displaying color-coded tags
      
      Result
      Admins can now see which user groups can access each model, and any ability/group changes are reflected instantly without the previous 1-minute delay.
      t0ng7u committed
    • feat: polish “Missing Models” UX & mobile actions layout · 2e201a43
      Overview
      • Re-designed `MissingModelsModal` to align with `ModelTestModal` and deliver a cleaner, paginated experience.
      • Improved mobile responsiveness for action buttons in `ModelsActions`.
      
      Details
      1. MissingModelsModal.jsx
         • Switched from `List` to `Table` for a more structured view.
         • Added search bar with live keyword filtering and clear icon.
         • Implemented pagination via `MODEL_TABLE_PAGE_SIZE`; auto-resets on search.
         • Dynamic rendering: when no data, show unified Empty state without column header.
         • Enhanced header layout with total-count subtitle and modal corner rounding.
         • Removed unused `Typography.Text` import.
      
      2. ModelsActions.jsx
         • Set “Delete Selected Models” and “Missing Models” buttons to `flex-1 md:flex-initial`, placing them on the same row as “Add Model” on small screens.
      
      Result
      The “Missing Models” workflow now offers quicker discovery, a familiar table interface, and full mobile friendliness—without altering API behavior.
      t0ng7u committed
    • feat(edit-vendor-modal): add icon-library reference link & tidy status switch · 1bd8e2a1
      Highlights
      • Introduced `Typography.Text` link with `IconLink` in `extraText` for the **icon** field, pointing to LobeHub’s full icon catalogue; only “请点击我” is clickable for clarity.
      • Added required imports for `Typography` and `IconLink`.
      • Removed unnecessary `size="large"` prop from the status `Form.Switch` to align with default form styling.
      
      These tweaks improve user guidance when selecting vendor icons and refine the modal’s visual consistency.
      t0ng7u committed
    • ️ refactor(models-table): extract reusable `renderLimitedItems` for list popovers · 4a9610e2
      Introduce a generic `renderLimitedItems` helper within `ModelsColumnDefs.js` to eliminate duplicated logic for list-style columns.
      
      Key changes
      • Added `renderLimitedItems` to handle item limiting, “+N” indicator, and popover display.
      • Migrated `renderTags`, `renderEndpoints`, and `renderBoundChannels` to use the new helper.
      • Removed redundant inline implementations, reducing complexity and improving readability.
      • Preserved previous UX: first 3 items shown, overflow accessible via popover.
      
      This refactor streamlines code maintenance and ensures consistent behavior across related columns.
      t0ng7u committed
    • fix: coderabbit review · b56a75cb
      Seefs committed
  5. 02 Aug, 2025 7 commits