- 12 Jul, 2025 10 commits
-
-
🎨 • Display remaining-quota percentage instead of used-quota in the Progress indicator - 100 % when quota is untouched, shown in green - Warn at ≤ 30 % (yellow) and at ≤ 10 % (red) - Hide internal label (`showInfo={false}`) and move the percentage text into the Tooltip - Switch Progress `size` to `small` for a lighter visual footprint • Update Tooltip to list used, remaining, total quota and the new percentage value • Uniformly set `size="small"` on all header Buttons and Form inputs within the table — enhances readability and keeps the main content centered UI/UX improvement only; no backend logic affected.t0ng7u committed -
🚑 Backend • `types/error.go` – Return empty string when receiver itself is `nil`. – If `Err` is `nil`, fall back to `errorCode` string to avoid calling `nil.Error()`. This prevents runtime panics when the error handler builds an OpenAI-style error response but the underlying `Err` field has not been set.
t0ng7u committed -
🐛 Backend • `model/channel.go` – On multi-key channel updates, recalculate `MultiKeySize` from the current key list. – If the request omits `key`, fetch existing keys from DB to avoid resetting the count to `0/0`. – Remove out-of-range entries from `MultiKeyStatusList` to keep data consistent. Frontend • `web/src/pages/Channel/EditChannel.js` – Vertex AI channels no longer require re-uploading a key file in edit mode. – When no new key is provided during editing, exclude the `key` field from the payload to prevent overwriting the stored value. These changes ensure that editing a channel no longer zeroes out the enabled key counter and that Vertex AI channels can be modified without mandatory key re-submission.
t0ng7u committed -
🐛 1. Recalculate `ChannelInfo.MultiKeySize` based on the current key list when a multi-key channel is updated. 2. Purge any indexes in `MultiKeyStatusList` that exceed the new key count to avoid stale or out-of-range data. This ensures the front-end display (`enabled x/x`) always reflects the real number of keys after users add or remove keys in edit mode.
t0ng7u committed -
# Conflicts: # web/src/components/table/LogsTable.js # web/src/i18n/locales/en.json # web/src/pages/Channel/EditChannel.js
t0ng7u committed -
✨ CaIon committed -
✨ CaIon committed -
feat: support xAI-search
Calcium-Ion committed -
✨ CaIon committed -
✨ CaIon committed
-
- 11 Jul, 2025 11 commits
-
-
🎨 The background utility class `bg-semi-color-bg-2` was unnecessary after recent design adjustments and unintentionally overrode intended styles. Removing it cleans up the markup and allows the footer to inherit the correct background from its parent containers. File affected: - web/src/components/layout/Footer.js Closes #1354
t0ng7u committed -
🐛 Previously, the tooltip that appears when more than one IP address is configured skipped the second IP (`ips.slice(2)`), so users could not see it unless they expanded the list in another way. Changed the slice start index to `1`, ensuring that **every IP after the first display tag** is included in the tooltip (`ips.slice(1).join(', ')`). File affected: - web/src/components/table/TokensTable.jst0ng7u committed -
⏱ Add custom validator to the `expired_time` DatePicker in `EditToken.js` to ensure that selected expiration timestamps are strictly in the future. - Introduce Promise-based validator that: • Rejects invalid date formats with a clear error message • Prevents past or current dates and shows “Expiration time cannot be earlier than the current time!” - Keeps support for the special “never expires” value (-1) - Blocks form submission until a valid future datetime is provided This change prevents accidental creation of already expired tokens and improves overall robustness of token management.
t0ng7u committed -
🎨 This commit overhauls the `TokensTable` component to deliver a cleaner, more intuitive experience. Key changes 1. Quota • Merged “Used” & “Remaining” into a single “Quota” column. • Uses a circular `Progress` with %-label; full details shown on tooltip. 2. Status • Tag now embeds a small `Switch` (prefixIcon) to enable/disable a token in-place. • Removed enable/disable actions from the old dropdown. 3. Columns & layout • Added dedicated “Group” column (moved from Status). • Added “Key” column: – Read-only `Input` styled like Home page base-URL field. – Masked value (`sk-abc********xyz`) by default. – Eye button toggles reveal/hide; Copy button copies full key (without modal). • Dropped “More” menu; Delete is now a direct button in the action area. 4. Model limits • Shows vendor icons inside an `AvatarGroup`; tooltip lists the exact models. 5. IP restriction • Displays first IP, extra count as “+N” Tag with tooltip. • Unlimited shows white Tag. 6. Cleanup / misc. • Removed unused helpers (`getQuotaPerUnit`), icons (`IconMore`, eye/copy duplicates, etc.). • Replaced legacy modal view of key with inline input behaviour. • Tweaked paddings, themes, sizes to align with design system. BREAKING CHANGE: Table column order & names have changed; update any tests or docs referencing the old structure.t0ng7u committed -
RedwindA committed
-
RedwindA committed
-
🎨 - import Kling & Jimeng icons from @lobehub/icons - extend getChannelIcon() to return corresponding icons for new channel types 50 (Kling) and 51 (Jimeng) - enhance EditChannel type selector: • introduce useMemo‐based channelOptionList with leading icons • utilize getChannelIcon for consistent icon rendering in dropdown options - minor refactor: add useMemo and getChannelIcon imports in EditChannel.js
t0ng7u committed -
🎨 🎨 style(ui): move type-specific “Other / Organization” inputs to Basic Info card for smoother channel setup Summary • **EditChannel.js** – Relocated the following conditional inputs from “Advanced Settings” to the initial “Basic Info” card: • Model version (type 18) • Deployment region (type 41) • Knowledge-base ID (type 21) • Account ID (type 39) • Agent ID (type 49) • OpenAI organization (type 1) – No functional changes; layout only. Why These fields are commonly filled during the first steps of channel creation. Surfacing them earlier reduces scrolling and streamlines the user workflow.t0ng7u committed -
🌐 Summary • **en.json** – Added translation for “是否自动禁用” → “Whether to automatically disable”. – Stubbed/added key for helper text “仅当自动禁用开启时有效,关闭后不会自动禁用该渠道” (translation placeholder left for future update). Why These keys were previously untranslated, causing mixed-language UI for the “Auto Disable” toggle in the channel edit form. Filling them (or at least registering the keys) ensures consistent localization and prevents runtime fallbacks.
t0ng7u committed -
✨ Summary • **EditChannel.js** – Displays “Fetch Model List” button for both *create* and *edit* modes (removed `isEdit` guard). – Unified model selector placeholder to “Please choose supported models”. – Added null-safety checks when parsing Axios responses. – Sends requests with `{ skipErrorHandler: true }`, preventing generic *500 Internal Server Error* toasts and relying on context-specific messages instead. • **helpers/api.js** – Introduced `skipErrorHandler` flag in the Axios response interceptor. If present, global `showError` is bypassed, giving callers full control over user-facing notifications. – Ensures `Promise.reject(error)` is returned for proper error propagation. Why Channel creators now enjoy the same convenience as editors when importing upstream model lists. Meanwhile, suppressing redundant toasts removes confusion caused by simultaneous custom and generic error messages.t0ng7u committed -
✨ CaIon committed
-
- 10 Jul, 2025 6 commits
-
-
🌐 This commit brings System Settings in line with Payment Settings and prepares the whole component for multi-language deployments. Key points ---------- • Introduced a “General Settings” card in `SystemSetting.js` - Adds a `ServerAddress` field (copied from Payment Settings). - Explains that this URL is used for payment callback & default homepage. - Implements `submitServerAddress` to persist the option. • Internationalisation - Imported `useTranslation` and wrapped **all** Chinese UI strings in `t()`. - Localised section titles, labels, placeholders, banners, buttons, modal texts and toast messages. - Dynamic banner/tool-tip descriptions now combine `t()` fragments with template literals for runtime URLs. • UX improvements - Added contextual `extraText` under the ServerAddress input. - Ensured placeholders like “sensitive info…” are translatable. With these changes, administrators can configure the server URL from the System Settings tab, and the entire page is ready for seamless language switching via the existing i18n framework.t0ng7u committed -
✨ CaIon committed -
🔧 CaIon committed -
# Conflicts: # controller/channel.go # middleware/distributor.go # model/channel.go # model/user.go # model/user_cache.go # relay/common/relay_info.go
CaIon committed -
This commit refactors the application's error handling mechanism by introducing a new standardized error type, `types.NewAPIError`. It also renames common JSON utility functions for better clarity. Previously, internal error handling was tightly coupled to the `dto.OpenAIError` format. This change decouples the internal logic from the external API representation. Key changes: - A new `types.NewAPIError` struct is introduced to serve as a canonical internal representation for all API errors. - All relay adapters (OpenAI, Claude, Gemini, etc.) are updated to return `*types.NewAPIError`. - Controllers now convert the internal `NewAPIError` to the client-facing `OpenAIError` format at the API boundary, ensuring backward compatibility. - Channel auto-disable/enable logic is updated to use the new standardized error type. - JSON utility functions are renamed to align with Go's standard library conventions (e.g., `UnmarshalJson` -> `Unmarshal`, `EncodeJson` -> `Marshal`).
CaIon committed -
🔧 CaIon committed
-
- 08 Jul, 2025 2 commits
-
-
✨ feat(ability): enhance FixAbility functionCalcium-Ion committed -
✨ CaIon committed
-
- 07 Jul, 2025 5 commits
-
-
修复了百度请求时候需要传appid的bug
Calcium-Ion committed -
refactor: log params and channel params
Xyfacai committed -
refactor: log params and channel params
Xiangyuan-liu committed -
🔧 CaIon committed -
duyazhe committed
-
- 06 Jul, 2025 6 commits
-
-
🎨 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 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 -
✨ 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 -
duyazhe committed
-
✨ CaIon committed -
🔧 CaIon committed
-