1. 07 Aug, 2025 2 commits
    • 🎨 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. 06 Aug, 2025 9 commits
  3. 05 Aug, 2025 12 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: support aws bedrock apikey · d31027d5
      wzxjohn 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
  4. 04 Aug, 2025 17 commits