1. 06 Jul, 2025 7 commits
    • 🎨 feat(ui): dynamic multi-key controls in Channel editor · e30eb7ff
      Summary
      1. Load `channel_info` when editing:
         • Detect if the channel is in multi-key mode (`is_multi_key`).
         • Auto-initialize `batch`, `multiToSingle`, and `multiKeyMode` from backend data.
      
      2. Visibility logic
         • Creation page: “Batch create / Multi-key mode” always available.
         • Edit page: show these controls **only when** the channel itself is multi-key.
      
      3. State consistency
         • `multi_key_mode` added to `inputs`; `setValues(inputs)` now preserves the user’s selection.
      
      Result
      Single-key channels no longer display irrelevant “key aggregation” options, while multi-key channels open with the correct defaults, providing a cleaner and more accurate editing experience.
      t0ng7u committed
    • 🔧 **fix(model, controller): robust serialization for `ChannelInfo` & correct… · d757125f
      🔧 **fix(model, controller): robust serialization for `ChannelInfo` & correct Vertex-AI key storage**
      
      Summary
      1. **model/channel.go**
         • Replaced the pointer-only `Value()` with a value-receiver implementation
         • GORM can now marshal both `ChannelInfo` and `*ChannelInfo`, eliminating
           `unsupported type model.ChannelInfo` runtime error.
      
      2. **controller/channel.go**
         • Refactored `getVertexArrayKeys()` – every element is now
           - passed through `json.Marshal` when not already a string
           - trimmed & validated before insertion
         • Guarantees each service-account key is persisted as a **pure JSON string**
           instead of the previous `map[...]` dump.
      
      Result
      • Channel creation / update succeeds without SQL driver errors.
      • Vertex-AI batch & multi-key uploads are stored in canonical JSON, ready for
        downstream SDKs to consume.
      t0ng7u committed
    • feat(channel): Robust Vertex AI batch-key upload & stable multi-key settings · f48ef010
      Summary
      -------
      1. Vertex AI JSON key upload
         • Accept multiple `.json` files (drag & drop / click).
         • Parse each `fileInstance`; build valid key array.
         • Malformed files are skipped and collected into **one** toast message.
         • Upload list now仅displays valid files; form state (`vertex_files`) 同步保持.
         • On *Submit* keys are re-parsed to prevent async timing loss.
      
      2. Multi-key mode stability
         • Added `multi_key_mode: "random"` to initial form values.
         • `Form.Select` becomes fully controlled (`value`/`onChange`).
         • Toggling the “multi-key mode” checkbox writes default / removes field, so
           `setValues(inputs)` no longer clears the user’s choice.
      
      3. UX / compatibility tweaks
         • Preserve uploaded files when editing any other field.
         • Use `fileInstance` only – compatible with legacy Semi Upload API.
         • Removed redundant `limit` prop on `Form.Upload`.
         • Aggregated error handling avoids toast spam.
      
      Result
      ------
      Channel creation/update now supports:
      • Reliable batch import of Vertex AI service-account keys.
      • Consistent retention of multi-key strategy (`random` / `polling`).
      • Cleaner, user-friendly error feedback.
      t0ng7u committed
    • Merge branch 'alpha' into mutil_key_channel · 7ddee5ea
      # Conflicts:
      #	controller/channel.go
      #	docker-compose.yml
      #	web/src/components/table/ChannelsTable.js
      #	web/src/pages/Channel/EditChannel.js
      CaIon committed
  2. 05 Jul, 2025 4 commits
  3. 04 Jul, 2025 5 commits
  4. 03 Jul, 2025 9 commits
    • 🎨 refactor(EditTagModal): tidy imports & enhance state-sync on open · f45caf29
      Motivation
      • Remove unused UI components to keep the bundle lean and silence linter warnings.
      • Ensure every time the side-sheet opens it reflects the latest tag data, avoiding stale form values (e.g., model / group mismatches).
      
      Key Changes
      1. UI Imports
         – Dropped `Input`, `Select`, `TextArea` from `@douyinfe/semi-ui` (unused in Form-based version).
      2. State Reset & Form Sync
         – On `visible` or `tag` change:
           • Refresh model & group options.
           • Reset `inputs` to clean defaults (`originInputs`) carrying the current `tag`.
           • Pre-fill Form through `formApiRef` to keep controlled fields aligned.
      3. Minor Cleanup
         – Added inline comment clarifying local state reset purpose.
      
      Result
      Opening the “Edit Tag” side-sheet now always displays accurate data without residual selections, and build output is cleaner due to removed dead imports.
      t0ng7u committed
    • refactor(EditChannel&EditToken): refactor Channel & Token edit pages with Semi… · 56dce5a7
       refactor(EditChannel&EditToken): refactor Channel & Token edit pages with Semi Form and UX enhancements
      
      Overview
      • Migrated both `EditChannel.js` and `EditToken.js` to fully leverage Semi UI `Form.*` components, removing legacy `Input/Select/TextArea` + manual labels.
      • Unified data-loading strategy: when the drawer becomes visible we load (or reset) data via `props.visible + id` effect and `formApi.setValues()`, guaranteeing fields are always populated; form resets on close.
      • Fixed blank-form bug when opening the same record twice.
      
      Key improvements
      1. Validation
         • `type`, `models` always required.
         • `key` required only while creating (not on edit).
      2. Batch key creation
         • Checkbox moved into `extraText`; hidden when editing or when channel type = 41.
      3. Layout & UI
         • `Row / Col` (12 + 12) for “Priority” and “Weight”.
         • Placeholders revised; model selector now shows creation hint; removed obsolete banner.
         • Help / extraText used for long hints, template buttons (`model_mapping`, `status_code_mapping`, `param_override`, etc.), and API address notice.
         • Added `showClear`, `min`, rounded card class names for consistency.
      4. Reusable helpers
         • `batchAllowed`, `batchExtra` utilities.
         • `getInitValues()` + centralized `inputs`→form synchronization.
      5. Token editor aligned to the same pattern (`props.visiable` watcher).
      
      Result
      Cleaner code, consistent UX, instant field population on every open, and clearer validation/error feedback across both editors.
      t0ng7u committed
    • 🔌 feat(api): extend endpoint type support & expose in pricing UI · dd9a1534
      * backend
        - constant/endpoint_type.go
          • Add EndpointTypeMidjourney, EndpointTypeSuno, EndpointTypeKling, EndpointTypeJimeng.
        - common/endpoint_type.go
          • Map Midjourney / MidjourneyPlus, SunoAPI, Kling, Jimeng channel types to the new endpoint types.
      
      * frontend
        - ModelPricing.js
          • Add “Supported Endpoint Type” column.
          • Implement renderSupportedEndpoints with `stringToColor` for consistent tag colors.
      
      These changes allow `/api/pricing` and model lists to return accurate
      `supported_endpoint_types` covering all non-OpenAI providers and display
      them clearly in the UI.
      
      No breaking changes.
      t0ng7u committed
    • Merge pull request #1314 from vickyyd/main · 5cb4c4e6
      修复使用gemini-balance作为上游时,测试gemini2.5pro模型时出现的错误问题
      Calcium-Ion committed
    • Merge pull request #1325 from feitianbubu/pr/fix-ali-embedding-lost-prompt-token · 62e82256
      fix: ali embedding lose prompt_tokens
      Calcium-Ion committed
    • Merge pull request #1326 from QuantumNous/refactor_constant · bb00bd0f
       feat: refactor environment variable initialization
      Calcium-Ion committed
    • feat: refactor environment variable initialization and introduce new constant… · f14f4eaf
       feat: refactor environment variable initialization and introduce new constant types for API and context keys
      CaIon committed
  5. 02 Jul, 2025 3 commits
  6. 01 Jul, 2025 7 commits
  7. 30 Jun, 2025 1 commit
  8. 29 Jun, 2025 1 commit
  9. 28 Jun, 2025 3 commits