- 02 Sep, 2025 11 commits
-
-
🐛 Ensure UpstreamConflictModal submits { overwrite: payload, locale } instead of spreading an array into an object Remove numeric-key fallback from applyUpstreamOverwrite for simpler and explicit logic Effect: selected fields are now actually updated; success message shows updated model count Refs: backend SyncUpstreamModels expects overwrite: overwriteField[]t0ng7u committed -
t0ng7u committed
-
✨ ✨ feat(sync): multi-language sync wizard, backend locale support, and conflict modal UX improvements Frontend (web) - ModelsActions.jsx - Replace “Sync Official” with “Sync” and open a new two-step SyncWizard. - Pass selected locale through to preview, sync, and overwrite flows. - Keep conflict resolution flow; inject locale into overwrite submission. - New: models/modals/SyncWizardModal.jsx - Two-step wizard: (1) method selection (config-sync disabled for now), (2) language selection (en/zh/ja). - Horizontal, centered Radio cards; returns { option, locale } via onConfirm. - UpstreamConflictModal.jsx - Add search input (model fuzzy search) and native pagination. - Column header checkbox now only applies to rows in the current filtered result. - Fix “Cannot access ‘filteredDataSource’ before initialization”. - Refactor with useMemo/useCallback; extract helpers to remove duplicated logic: - getPresentRowsForField, getHeaderState, applyHeaderChange - Minor code cleanups and stability improvements. - i18n (en.json) - Add strings for the sync wizard and related actions (Sync, Sync Wizard, Select method/source/language, etc.). - Adjust minor translations. Hooks - useModelsData.jsx - Extend previewUpstreamDiff, syncUpstream, applyUpstreamOverwrite to accept options with locale. - Send locale via query/body accordingly. Backend (Go) - controller/model_sync.go - Accept locale from query/body and resolve i18n upstream URLs. - Add SYNC_UPSTREAM_BASE for upstream base override (default: https://basellm.github.io/llm-metadata). - Make HTTP timeouts/retries/limits configurable: - SYNC_HTTP_TIMEOUT_SECONDS, SYNC_HTTP_RETRY, SYNC_HTTP_MAX_MB - Add ETag-based caching and support both envelope and pure array JSON formats. - Concurrently fetch vendors and models; improve error responses with locale and source URLs. - Include source meta (locale, models_url, vendors_url) in success payloads. Notes - No breaking changes expected. - Lint passes for touched files.t0ng7u committed -
fix: adjust column spans in JSONEditor for better layout #1719
Seefs committed -
Seefs committed
-
openai v1/models 完全兼容 解决接入trae时候的字段校验
Seefs committed -
Seefs committed
-
🎨 - Set sidebar skeleton background to use theme variable (--semi-color-bg-0) instead of hardcoded white for better dark mode compatibility - Apply consistent background to both collapsed and expanded skeleton states - Ensure sidebar container uses theme background when skeleton is loading - Remove duplicate margin-right classes from skeleton wrapper components that conflicted with CSS definitions - Simplify navigation text structure by removing unnecessary div wrappers to improve text truncation - Add proper text layout styles for better truncation handling when menu items have long names - Standardize icon-to-text spacing across all sidebar navigation items
t0ng7u committed -
xuebin committed
-
creamlike1024 committed
-
feitianbubu committed
-
- 01 Sep, 2025 13 commits
-
-
t0ng7u committed
-
🤖 t0ng7u committed -
🐛 The Linux/Vite build failed with: “Could not resolve "./headerbar" from "src/components/layout/PageLayout.jsx"” On Linux and with stricter ESM/rollup resolution, directory index files (index.jsx) may not be auto-resolved reliably. Explicitly importing the index file ensures cross-platform stability. Changes: - Update PageLayout import from "./headerbar" to "./headerbar/index.jsx" Impact: - Fixes build on Linux - No runtime behavior changes Verification: - Linter passes for web/src/components/layout/PageLayout.jsx Notes: - Prefer explicit index file imports (and extensions) to avoid platform differences.
t0ng7u committed -
🌏 t0ng7u committed -
✨ Add comprehensive skeleton screen implementation for sidebar to improve loading UX, matching the existing headerbar skeleton pattern. ## Features Added - **Sidebar skeleton screens**: Complete 1:1 recreation of sidebar structure during loading - **Responsive skeleton layouts**: Different layouts for expanded (164×30px) and collapsed (44×44px) states - **Skeleton component enhancements**: Extended SkeletonWrapper with new skeleton types (sidebar, button, sidebarNavItem, sidebarGroupTitle) - **Minimum loading time**: Integrated useMinimumLoadingTime hook with 500ms duration for smooth UX ## Layout Specifications - **Expanded nav items**: 164×30px with 8px horizontal margins and 3px vertical margins - **Collapsed nav items**: 44×44px with 4px bottom margin and 8px horizontal margins - **Collapse button**: 156×24px (expanded) / 36×24px (collapsed) with rounded corners - **Container padding**: 12px top padding, 8px horizontal margins - **Group labels**: 4px 15px 8px padding matching real sidebar-group-label styles ## Code Improvements - **Refactored skeleton rendering**: Eliminated code duplication using reusable components (NavRow, CollapsedRow) - **Configuration-driven sections**: Sections defined as config objects with title widths and item widths - **Fixed width calculations**: Removed random width generation, using precise fixed widths per menu item - **Proper CSS class alignment**: Uses real sidebar CSS classes (sidebar-section, sidebar-group-label, sidebar-divider) ## UI/UX Enhancements - **Bottom-aligned collapse button**: Fixed positioning using margin-top: auto to stay at viewport bottom - **Accurate spacing**: Matches real sidebar margins, padding, and spacing exactly - **Skeleton stability**: Fixed width values prevent layout shifts during loading - **Clean file structure**: Removed redundant HeaderBar.js export file ## Technical Details - Extended SkeletonWrapper component with sidebar-specific skeleton types - Integrated skeleton loading state management in SiderBar component - Added support for collapsed state awareness in skeleton rendering - Implemented precise dimension matching for pixel-perfect loading states Closes: Sidebar skeleton loading implementation
t0ng7u committed -
- Delete dropIndexIfExists helper from `model/main.go` - Remove all calls to dropIndexIfExists in `migrateDB` and `migrateDBFast` - Drop related comments and MySQL-only DROP INDEX code paths - Keep GORM AutoMigrate as the sole migration path for `Model` and `Vendor` Why: - Simplifies migrations and avoids destructive index drops at startup - Prevents noisy MySQL 1091 errors and vendor-specific branches - Aligns with composite unique indexes (uk_model_name_delete_at, uk_vendor_name_delete_at) Impact: - No expected runtime behavior change; schema remains managed by GORM - Legacy single-column unique indexes (if any) will no longer be auto-dropped - Safe across MySQL/PostgreSQL/SQLite; MySQL Chinese charset checks remain intact Verification: - Lint passed for `model/main.go` - Confirmed no remaining `DROP INDEX` or `dropIndexIfExists` references
t0ng7u committed -
✨ ✨ feat(models-sync): official upstream sync with conflict resolution UI, opt‑out flag, and backend resiliency Backend - Add endpoints: - GET /api/models/sync_upstream/preview — diff preview (filters out models with sync_official = 0) - POST /api/models/sync_upstream — apply sync (create missing; optionally overwrite selected fields) - Respect opt‑out: skip models with sync_official = 0 in both preview and apply - Return detailed stats: created_models, created_vendors, updated_models, skipped_models, plus created_list / updated_list - Add model.Model.SyncOfficial (default 1); auto‑migrated by GORM - Make HTTP fetching robust: - Shared http.Client (connection reuse) with 3x exponential backoff retry - 10MB response cap; keep existing IPv4‑first for *.github.io - Vendor handling: - New ensureVendorID helper (cache lookup → DB lookup → create), reduces round‑trips - Transactional overwrite to avoid partial updates - Small cleanups and clearer helpers (containsField, coalesce, chooseStatus) Frontend - ModelsActions: add “Sync official” button with Popover (p‑2) explaining community contribution; loading = syncing || previewing; preview → conflict modal → apply flow - New UpstreamConflictModal: - Per‑field columns (description/icon/tags/vendor/name_rule/status) with column‑level checkbox to select all - Cell with Checkbox + Tag (“Click to view differences”) and Popover (p‑2) showing Local vs Official values - Auto‑hide columns with no conflicts; responsive width; use native Semi Modal footer - Full i18n coverage - useModelsData: add syncing/previewing states; new methods previewUpstreamDiff, applyUpstreamOverwrite, syncUpstream; refresh vendors/models after apply - EditModelModal: add “Participate in official sync” switch; persisted as sync_official - ModelsColumnDefs: add “Participate in official sync” column i18n - Add missing English keys for the new UI and messages; fix quoting issues Refs - Upstream metadata: https://github.com/basellm/llm-metadatat0ng7u committed -
✨ Backend (controller/ratio_sync.go): - Add built‑in official upstream to GetSyncableChannels (ID: -100, BaseURL: https://basellm.github.io) - Support absolute endpoint URLs; otherwise join BaseURL + endpoint (defaults to /api/ratio_config) - Harden HTTP client: - IPv4‑first with IPv6 fallback for github.io - Add ResponseHeaderTimeout - 3 attempts with exponential backoff (200/400/800ms) - Validate Content-Type and limit response body to 10MB (safe decode via io.LimitReader) - Robust parsing: support type1 ratio_config map and type2 pricing list - Use net.SplitHostPort for host parsing - Use float tolerance in differences comparison to avoid false mismatches - Remove unused code (tryDirect) and improve warnings Frontend: - UpstreamRatioSync.jsx: auto-assign official endpoint to /llm-metadata/api/newapi/ratio_config-v1-base.json - ChannelSelectorModal.jsx: - Pin the official source at the top of the list - Show a green “官方” tag next to the status - Refactor status renderer to accept the full record Notes: - Backward compatible; no API surface changes - Official ratio_config reference: https://basellm.github.io/llm-metadata/api/newapi/ratio_config-v1-base.json
t0ng7u committed -
fix: update model name filtering to be case-sensitive
Seefs committed -
feat: bark notification #1699
Seefs committed -
feat: add channel remark #1710
Seefs committed -
Seefs committed
-
Seefs committed
-
- 31 Aug, 2025 8 commits
-
-
fix: prevent loop auto-migrate with bool default false
IcedTangerine committed -
creamlike1024 committed
-
creamlike1024 committed
-
creamlike1024 committed
-
creamlike1024 committed
-
creamlike1024 committed
-
🎨 - Apply canonical Go formatting to all .go files - No functional changes; whitespace/import/struct layout only - Improves consistency, reduces diff noise, and aligns with standard tooling
t0ng7u committed -
🐛 - Model: rename `uk_model_name` -> `uk_model_name_delete_at` (composite on `model_name` + `deleted_at`) - Vendor: rename `uk_vendor_name` -> `uk_vendor_name_delete_at` (composite on `name` + `deleted_at`) - Keep legacy cleanup in `model/main.go` to drop old index names (`uk_model_name`, `model_name`, `uk_vendor_name`, `name`) for compatibility. Result: idempotent GORM migrations and no unnecessary index churn on MySQL restarts. Files: - `model/model_meta.go` - `model/vendor_meta.go`
t0ng7u committed
-
- 30 Aug, 2025 2 commits
-
-
增加用户体验
F。 committed -
🎨 - Ran: bun run eslint:fix && bun run lint:fix - Inserted AGPL license header via eslint-plugin-header - Enforced no-multiple-empty-lines and other lint rules - Formatted code using Prettier v3 (@so1ve/prettier-config) - No functional changes; formatting-only baseline across JS/JSX files
t0ng7u committed
-
- 29 Aug, 2025 6 commits
-
-
🤓 t0ng7u committed -
✨ - Add defaultVendorIcons mapping for major AI vendors - Update getOrCreateVendor to automatically set vendor icons - Add getDefaultVendorIcon helper function - Support LobeHub icons Color variants (e.g., Claude.Color, Gemini.Color) - Fix issue where default vendors were created without icons This ensures that when new models are encountered, their vendors will be created with appropriate colored icons for better UI display. Affected vendors include: - OpenAI, Anthropic, Google, Moonshot, 智谱, 阿里巴巴 - DeepSeek, MiniMax, 百度, 讯飞, 腾讯, Cohere - Cloudflare, 360, 零一万物, Jina, Mistral, xAI - Meta, 字节跳动, 快手, 即梦, Vidu, Microsoft/Azure
t0ng7u committed -
creamlike1024 committed
-
Merge branch 'pr/fix-kling-text2image' of github.com:feitianbubu/new-api into feitianbubu-pr/fix-kling-text2image
creamlike1024 committed -
creamlike1024 committed
-
Merge branch 'pr/kling-new-params' of github.com:feitianbubu/new-api into feitianbubu-pr/kling-new-params
creamlike1024 committed
-