1. 05 Aug, 2025 2 commits
    • 🚀 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
  2. 04 Aug, 2025 17 commits
  3. 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
  4. 02 Aug, 2025 13 commits
  5. 01 Aug, 2025 1 commit