1. 14 Aug, 2025 2 commits
    • refactor: centralize logging and update resource initialization · c9e9a24e
      This commit refactors the logging mechanism across the application by replacing direct logger calls with a centralized logging approach using the `common` package. Key changes include:
      
      - Replaced instances of `logger.SysLog` and `logger.FatalLog` with `common.SysLog` and `common.FatalLog` for consistent logging practices.
      - Updated resource initialization error handling to utilize the new logging structure, enhancing maintainability and readability.
      - Minor adjustments to improve code clarity and organization throughout various modules.
      
      This change aims to streamline logging and improve the overall architecture of the codebase.
      CaIon committed
    • refactor: Introduce pre-consume quota and unify relay handlers · 97ea8b65
      This commit introduces a major architectural refactoring to improve quota management, centralize logging, and streamline the relay handling logic.
      
      Key changes:
      - **Pre-consume Quota:** Implements a new mechanism to check and reserve user quota *before* making the request to the upstream provider. This ensures more accurate quota deduction and prevents users from exceeding their limits due to concurrent requests.
      
      - **Unified Relay Handlers:** Refactors the relay logic to use generic handlers (e.g., `ChatHandler`, `ImageHandler`) instead of provider-specific implementations. This significantly reduces code duplication and simplifies adding new channels.
      
      - **Centralized Logger:** A new dedicated `logger` package is introduced, and all system logging calls are migrated to use it, moving this responsibility out of the `common` package.
      
      - **Code Reorganization:** DTOs are generalized (e.g., `dalle.go` -> `openai_image.go`) and utility code is moved to more appropriate packages (e.g., `common/http.go` -> `service/http.go`) for better code structure.
      CaIon committed
  2. 12 Aug, 2025 14 commits
  3. 11 Aug, 2025 17 commits
  4. 10 Aug, 2025 7 commits
    • 🔧 chore(db): drop legacy single-column UNIQUE indexes to prevent duplicate-key… · 067f3ce9
      🔧 chore(db): drop legacy single-column UNIQUE indexes to prevent duplicate-key errors after soft-delete
      
      Why
      Previous versions created single-column UNIQUE constraints (`models.model_name`, `vendors.name`).
      After introducing composite indexes on `(model_name, deleted_at)` and `(name, deleted_at)` for soft-delete support, those legacy constraints could still exist in user databases.
      When a record was soft-deleted and re-inserted with the same name, MySQL raised `Error 1062 … for key 'models.model_name'`.
      
      What
      • In `migrateDB` and `migrateDBFast` paths of `model/main.go`, proactively drop:
        – `models.uk_model_name` and fallback `models.model_name`
        – `vendors.uk_vendor_name` and fallback `vendors.name`
      • Keeps existing helper `dropIndexIfExists` to ensure the operation is MySQL-only and error-free when indexes are already absent.
      
      Result
      Startup migration now removes every possible legacy UNIQUE index, ensuring composite index strategy works correctly.
      Users can soft-delete and recreate models/vendors with identical names without hitting duplicate-entry errors.
      t0ng7u committed
    • 🤓 chore: format code file · 8d54f862
      t0ng7u committed
    • 🏎️ perf: optimize aggregated model look-ups by batching bound-channel queries · 0bcd7388
      Summary
      -------
      1. **Backend**
         • `model/model_meta.go`
           – Add `GetBoundChannelsForModels([]string)` to retrieve channels for multiple models in a single SQL (`IN (?)`) and deduplicate with `GROUP BY`.
      
         • `controller/model_meta.go`
           – In non-exact `fillModelExtra`:
             – Remove per-model `GetBoundChannels` calls.
             – Collect matched model names, then call `GetBoundChannelsForModels` once and merge results into `channelSet`.
             – Minor cleanup on loop logic; channel aggregation now happens after quota/group/endpoint processing.
      
      Impact
      ------
      • Eliminates N+1 query pattern for prefix/suffix/contains rules.
      • Reduces DB round-trips from *N + 1* to **1**, markedly speeding up the model-management list load.
      • Keeps existing `GetBoundChannels` API intact for single-model scenarios; no breaking changes.
      t0ng7u committed
    • Merge pull request #1547 from seefs001/feature/model_list · 3b6d0d02
       feat: Enhance model listing and retrieval with support for Anthropic and Gemini models; refactor routes for better API key handling
      Seefs committed
    • 🔍 feat: Show matched model names & counts for non-exact model rules · 51f7f891
      Summary
      -------
      1. **Backend**
         • `model/model_meta.go`
           – Add `MatchedModels []string` and `MatchedCount int` (ignored by GORM) to expose matching details in API responses.
         • `controller/model_meta.go`
           – When processing prefix/suffix/contains rules in `fillModelExtra`, collect every matched model name, fill `MatchedModels`, and calculate `MatchedCount`.
      
      2. **Frontend**
         • `web/src/components/table/models/ModelsColumnDefs.js`
           – Import `Tooltip`.
           – Enhance `renderNameRule` to:
             – Display tag text like “前缀 5个模型” for non-exact rules.
             – Show a tooltip listing all matched model names on hover.
      
      Impact
      ------
      Users now see the total number of concrete models aggregated under each prefix/suffix/contains rule and can inspect the exact list via tooltip, improving transparency in model management.
      t0ng7u committed