Skip to content

Pr/alpha/video action constant - #1308

Closed
feitianbubu wants to merge 94 commits into
QuantumNous:mainfrom
feitianbubu:pr/alpha/video-action-constant
Closed

Pr/alpha/video action constant#1308
feitianbubu wants to merge 94 commits into
QuantumNous:mainfrom
feitianbubu:pr/alpha/video-action-constant

Conversation

@feitianbubu

@feitianbubu feitianbubu commented Jun 27, 2025

Copy link
Copy Markdown
Member

可灵和即梦的action改为常量

Summary by CodeRabbit

  • New Features

    • Added support for the "Jimeng" video generation platform, including integration, task submission, and result parsing.
    • Introduced batch deletion for tokens and enhanced token table with batch operations and improved copy options.
    • Added compact mode toggles for all major tables (channels, logs, tokens, users, redemptions, task logs, MJ logs) for improved UI flexibility.
    • Enabled status-based filtering and pagination in channel management, and improved model testing modal with selection and pagination.
    • Enhanced personal settings with a tabbed interface, expanded account binding options, and detailed notification configuration.
    • Improved homepage with dynamic API endpoint selection and copy functionality.
    • Markdown support added for system announcements and FAQ content display.
  • Improvements

    • Unified and simplified table layouts, headers, and section styling across the web interface.
    • Enhanced model management in channel editing, including copy and clear all models features.
    • Updated environment variable defaults and documentation for streaming timeout.
    • Improved quota and group ratio handling for more accurate billing and logging.
    • Added reliability/confidence indicators for upstream data in ratio sync.
  • Bug Fixes

    • Fixed model duplication and trimming issues in channel editing.
    • Corrected group usage in quota and log recording to reflect the effective group context.
  • Developer Experience

    • Refactored code for consistent response handling, error management, and JSON processing.
    • Added new constants and helper utilities for table display modes and task actions.
    • Extended localization with new translations and improved clarity of existing entries.

JoeyLearnsToCode and others added 30 commits May 19, 2025 19:33
use review's suggestion

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
…o tabs

* Moved `GroupRatioSettings` component inside the existing Tabs as a new **Group Ratios** tab.
* Removed the standalone `Card` that previously wrapped `GroupRatioSettings`.
* Re-formatted JSX props for `ModelRatioSettings` and `GroupRatioSettings` to improve readability.
* Consolidates all ratio-related settings into a single tabbed view for a cleaner and more consistent UI.
…tion & UI enhancements

Backend
- controller/ratio_sync.go
  • Parse /api/pricing response and convert to ratio / price maps.
  • Introduce confidence heuristic (model_ratio = 37.5 && completion_ratio = 1) to flag unreliable data.
  • Include confidence map when building differences and filter “same”/empty entries.
- dto/ratio_sync.go
  • Add `ID` to UpstreamDTO, `upstreams` to UpstreamRequest, and `Confidence` to DifferenceItem.

Frontend
- ChannelSelectorModal.js
  • Re-implement with table layout, pagination, search, endpoint-type selector and mobile support.
- UpstreamRatioSync.js
  • Send full upstream objects, add ratio-type filter, confidence badges/tooltips, retain endpoints.
  • Leverage ChannelSelectorModal’s pagination reset.
- ChannelsTable.js – fix tag color for disabled status.
- en.json – add translations for new UI labels.

Motivation
These changes let users sync model ratios / prices from different upstream endpoints and visually identify potentially unreliable data, improving operational safety and flexibility.
- Introduced `isNoThinkingRequest` and `trimModelThinking` functions to manage model names and thinking configurations.
- Updated `GeminiHelper` to conditionally adjust the model name based on the thinking budget and request settings.
- Refactored `ThinkingAdaptor` to streamline the integration of thinking capabilities into Gemini requests.
- Cleaned up commented-out code in `FetchUpstreamModels` for clarity.

These changes improve the handling of model configurations and enhance the adaptability of the Gemini relay system.
* Added “Expand Edit” button with `Maximize2` icon to open a large modal editor
* Introduced full-screen `TextArea` modal; content syncs back to main form via Form API
* Switched to correct `TextArea` import from Semi UI to fix invalid element error
* Implemented ellipsis & `Tooltip` for “content” and “extra” columns to keep table concise
* Added state management (`showContentModal`, `formApiRef`) and related handlers
* Updated success messages & punctuation for consistency
…xt truncation

* Added `Tooltip` component and ellipsis style for “question” & “answer” columns
* Keeps table compact while showing full content on hover
* Updated success messages punctuation for consistency
…ess texts, add Markdown/HTML hint

• SettingsAnnouncements.js
  – Placeholder now states “Supports Markdown/HTML” for both small & expanded editors
  – Success/alert messages unified to use Chinese quotation marks

• SettingsFAQ.js
  – Answer textarea placeholder updated with Markdown/HTML support note
  – Unified success/alert messages punctuation

These tweaks clarify rich-text support and keep UI copy consistent.
…aceholder

feat: add placeholder for kling AccessKey and SecretKey
feat: openrouter format for claude request
feat: enhance token usage details for upstream OpenRouter
t0ng7u and others added 27 commits June 25, 2025 22:21
• LoginForm / RegisterForm now initialise `status` directly from localStorage,
  avoiding a post-mount state update that caused a UI flash between OAuth
  options and email/username forms.

• Move Turnstile configuration into a dedicated effect that depends on
  `status`, ensuring setState is not called during rendering.

• Remove unused `setStatus` setter to resolve ESLint “declared but never read”
  warnings.

• Minor refactors: reorder hooks, de-duplicate navigate/context variables and
  streamline state destructuring for improved readability.
This commit refreshes the visual design of the authentication pages and aligns them with the Home banner style.

Details
• LoginForm.js / RegisterForm.js / PasswordResetForm.js / PasswordResetConfirm.js
  – Wrap top-level container with `relative overflow-hidden` to provide a positioning context.
  – Inject two decorative blur balls:
    ▸ Indigo ball on the top-right (`blur-ball-indigo`).
    ▸ Teal ball on the middle-left (`blur-ball-teal`).
  – Disabled the default X-axis transform on the indigo ball to keep the ball anchored to the corner.
  – Removed redundant `mt-[64px]` from the outer container and shifted it to the inner wrapper to maintain vertical rhythm without affecting the background placement.

Result
The auth screens now feature subtle, non-intrusive atmospheric gradients in the top-right and mid-left corners, offering a cohesive look & feel across the application without obstructing the main content.
…nd Register-forms

Why
Clicking the “Continue” button on the login page no longer triggered the submission logic. The issue was introduced when `useState`/`useContext` hooks were destructured incorrectly, breaking the setter reference and omitting required values.

What’s changed
• **LoginForm.js**
  – Re-added setter in `useSearchParams` (`[searchParams, setSearchParams]`).
  – Corrected order of destructuring for `inputs` so `username`/`password` are available after hooks.
  – Switched `useContext` to `[userState, userDispatch]` for consistency.

• **RegisterForm.js**
  – Adopted `[userState, userDispatch]` from `UserContext` to mirror LoginForm and retain full state access.

Outcome
Login button now successfully invokes `handleSubmit`, and both auth components have consistent, fully-featured hook destructuring, preventing runtime errors and ensuring future state usage is straightforward.
Login Form used to display the message “未登录或登录已过期,请重新登录” twice
because the `useEffect` that inspects the `expired` query parameter was
re-executed on every re-render (e.g. language change or React StrictMode’s
double-mount in development).

### What's changed
• **LoginForm.js** – `useEffect` that shows the toast now has an empty
  dependency array so it runs only once on initial mount.
• Reviewed **PasswordResetConfirm.js**, **PasswordResetForm.js** and
  **RegisterForm.js** and confirmed they do not contain the same issue;
  no changes were required.

### Impact
Users now see the “session expired” notification exactly once, removing
confusion and improving the overall UX.
• Add conditional rendering (`!status.self_use_mode_enabled`) to LoginForm
• Suppress “Don't have an account? Register” CTA in self-hosted scenarios
• Keeps UI clean and prevents unintended user sign-ups under self-use mode
• No impact on regular multi-user deployments
…zed props

Summary
• Replaced gradient header blocks with compact, neutral headers wrapped in `Avatar` across the following pages:
  - Channel / EditChannel.js
  - Channel / EditTagModal.js
  - Redemption / EditRedemption.js
  - Token / EditToken.js
  - User / EditUser.js
  - User / AddUser.js

Details
1. Added `Avatar` import and substituted raw icon elements, assigning semantic colors (`blue`, `green`, `purple`, `orange`, etc.) and consistent 16 px icons for a cleaner look.
2. Removed gradient backgrounds, decorative “blur-ball” shapes, and extra paddings from header containers to achieve a tight, flat design.
3. Stripped all `size="large"` attributes from `Button`, `Input`, `Select`, `DatePicker`, `AutoComplete`, and `Avatar` components, allowing default sizing for better visual density.
4. Eliminated redundant `bodyStyle` background overrides in some `SideSheet` components.
5. No business logic touched; all changes are purely presentational.

Result
The editing and creation dialogs now share a unified, compact style consistent with the latest design language, improving readability and user experience without altering functionality.
…ish UX

SUMMARY
• Re-implemented `EditToken.js` with Semi Form components, eliminating manual state handling and reducing re-renders.
• Added grid-based layout; “Expiration Time” selector now sits inline with quick-set buttons for consistent alignment on desktop & mobile.
• Introduced dedicated “Quota”, “Access”, “Model Limits”, and “Group” cards for clearer field grouping.
• Reworked model-limit interaction: single multi-select list replaces checkbox toggle; backend flag `model_limits_enabled` is now inferred automatically.
• Applied required validation rules to critical fields (`name`, `remain_quota`, `group`, `expired_time`, `tokenCount`) with localized messages.
• Enabled dynamic option loading for models & groups; default auto-group honoured.
• Added unlimited-quota switch, quota presets, and helpful extraText/tooltips.
• Removed obsolete `handleInputChange` & `setUnlimitedQuota` helpers; formApi now manages all data flow.
• Cleaned imports (e.g., dropped unused `IconUserGroup`), fixed linter errors, and updated submit logic to use `formApi.submitForm()`.

RESULT
The token creation/editing experience is faster, more accessible, and easier to maintain, fully aligned with Semi Design best practices.
… enhance UX

SUMMARY
• Re-implemented `web/src/pages/Redemption/EditRedemption.js` with Semi Form components, removing legacy local-state handling.
• Added `formApiRef` for centralized control; external “Submit” button now triggers `formApi.submitForm()`.
• Replaced `Input/AutoComplete/DatePicker` etc. with `<Form.*>` fields, leveraging built-in validation & accessibility.
• Field validations:
  – `name` (create only), `quota`, `count` → required with localized messages.
• Expiration-time flow:
  – Default value `null` (no more 1970-01-01).
  – When loading data, convert 0 → null, timestamp → Date.
  – On submit, Date → unix seconds; empty → 0.
• Responsive grid layout (`Row/Col`) for tidy alignment.
• Added helpful `showClear` & full-width styling for inputs; quota presets retained.
• Cleaned unused imports & handlers; fixed linter issues.

RESULT
The Redemption form now benefits from higher performance, clearer validation, and a cleaner codebase consistent with Semi Design best practices.
Previously, the table did not enter the loading state after performing actions such as deleting, enabling, or disabling a redemption code. This caused a brief period where the UI appeared unresponsive while awaiting the backend response.

Changes made:
• Added `setLoading(true)` at the beginning of `loadRedemptions` to activate the loading spinner whenever data is (re)fetched.
• Added an explanatory code comment to clarify the intent.

This improves user experience by clearly indicating that the system is processing and prevents confusion during data refresh operations.
…tate

Summary:
The redemption list occasionally displayed an invalid range such as “Items -9 - 0” and failed to highlight page 1 after a refresh. This was caused by the table being initialized with `currentPage = 0`.

Changes:
• update `useEffect` to load data starting from page 1 instead of page 0
• refactor `loadRedemptions` to accept `page` (default 1) and sanitize backend‐returned pages (`<= 0` coerced to 1)
• keep other logic unchanged

Impact:
Pagination text and page selection now show correct values on first load or refresh, eliminating negative ranges and ensuring the first page is properly highlighted.
Changes in `web/src/pages/User/EditUser.js`:
• Added `rules` to
  – `Form.Select group`: now required with error “Please select group”.
  – `Form.InputNumber quota`: now required with error “Please enter quota”.
• Added `step={500000}` to quota `InputNumber` for quicker numeric input.
• Replaced invalid `readonly` with React-correct `readOnly`, and added descriptive placeholders for all binding-info fields (GitHub/OIDC/WeChat/Email/Telegram).
• Removed unused `downloadTextAsFile` import.

These updates tighten form validation, improve data entry ergonomics, and restore clear read-only indicators for third-party bindings.
… until after creation

Previously, the "Fetch Model List" button was visible in the channel-creation view even though
it only functions once a channel record exists, leading to user confusion.

Changes introduced:
• Render the "Fetch Model List" button only when editing an existing channel (`isEdit === true`).
• Display an informational Banner in creation mode to remind users that the upstream model list
  can be fetched after the channel has been created.
• Refactored JSX to apply the above conditional rendering without altering existing logic.

This update streamlines the creation workflow and sets clearer expectations for users.
Changes:
- Replaced error returns with logging for response body copy failures to prevent early termination of the request.
- Ensured that the response body is closed properly after writing to the client.
- Added comments to clarify the handling of billing and error reporting after the response has been sent.

This update improves error handling and maintains resource management in the OpenAI handler.
…BodyGracefully for improved error handling

This update standardizes the closure of HTTP response bodies across multiple stream handlers, enhancing error management and resource cleanup. The new method ensures that any errors during closure are handled gracefully, preventing potential request termination issues.
…onse body handling

This update adds the IOCopyBytesGracefully function to the common package, which simplifies the process of copying response bodies in the OpenAI handlers. It enhances error handling and ensures proper resource management by encapsulating the logic for setting headers and writing response data. The OpenAI handlers have been refactored to utilize this new function, improving code clarity and maintainability.
@coderabbitai

coderabbitai Bot commented Jun 27, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This update introduces comprehensive support for the "Jimeng" video channel and task platform, including new constants, relay modes, and a full TaskAdaptor implementation. It refactors group ratio handling by introducing the UsingGroup field, enhances batch operations for tokens, adds status filtering and compact mode toggles to tables, and improves UI/UX across the web interface.

Changes

Files / Areas Change Summary
common/http.go, many relay/channel/*/*.go, service/error.go, etc. Unified HTTP response body closing via common.CloseResponseBodyGracefully and consistent JSON handling.
common/constants.go, constant/context_key.go, constant/task.go, relay/constant/relay_mode.go Added Jimeng channel/task constants, context key, relay modes, and actions.
relay/channel/task/jimeng/adaptor.go New: Jimeng TaskAdaptor with full request, signing, and result parsing logic.
relay/channel/task/kling/adaptor.go, relay/channel/task/suno/adaptor.go, relay/relay_adaptor.go Refactored Kling adaptor for richer response, metadata, and new interface method; Suno stub updated; Jimeng support added to relay adaptor.
controller/task.go, controller/task_video.go Unified video task update logic for Kling/Jimeng; refactored task status/result parsing.
controller/channel.go, controller/ratio_sync.go, dto/ratio_sync.go Added status filtering for channels; enhanced upstream ratio sync with confidence and flexible input.
relay/common/relay_info.go, relay/helper/price.go, relay/relay_task.go, service/quota.go, etc. Renamed Group to UsingGroup, improved group ratio and quota calculation, added per-call pricing helper.
model/token.go, controller/token.go, router/api-router.go, web/src/components/table/TokensTable.js Batch token deletion backend and frontend support.
middleware/distributor.go, middleware/kling_adapter.go, router/video-router.go Routing/middleware for Kling and Jimeng, including model/platform detection and request conversion.
web/src/constants/channel.constants.js, web/src/constants/common.constant.js Jimeng channel added, new constants for compact mode, endpoints, and task actions.
web/src/components/table/*Table.js, web/src/hooks/useTableCompactMode.js, web/src/helpers/utils.js Added compact mode toggle for tables (users, logs, tokens, channels, etc.), persisted in localStorage.
web/src/components/table/ChannelsTable.js, controller/channel.go Status filter for channels, persisted in localStorage, with backend support.
web/src/components/table/TaskLogsTable.js, web/src/constants/common.constant.js Support for new task actions and Jimeng platform in logs.
web/src/components/settings/PersonalSetting.js, web/src/components/settings/RatioSetting.js Refactored settings UI to tabbed layout, integrated group ratio settings.
web/src/components/layout/NoticeModal.js, web/src/pages/Detail/index.js Markdown rendering for announcements and FAQ content.
web/src/pages/*/index.js, web/src/components/auth/*, web/src/index.css Consistent top margin for main pages, new blur-ball background effects, and improved form visuals.
web/src/pages/Home/index.js Enhanced homepage with dynamic base URL display, endpoint selector, and copy function.
web/src/pages/Channel/EditChannel.js, web/src/pages/Channel/EditTagModal.js Simplified section headers, improved model list handling, added copy/clear model buttons.
README.md, README.en.md, .env.example, constant/env.go Updated default streaming timeout to 120s in docs and config.
web/src/i18n/locales/en.json Added/updated translations for new features, compact mode, batch actions, and reliability indicators.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant WebUI
    participant API
    participant JimengAdaptor
    participant JimengAPI

    User->>WebUI: Submits video generation task (Jimeng)
    WebUI->>API: POST /video/generations (with Jimeng model)
    API->>JimengAdaptor: Validate & build request
    JimengAdaptor->>JimengAPI: Signed POST /submit_task
    JimengAPI-->>JimengAdaptor: JSON response (task_id)
    JimengAdaptor-->>API: Return task_id
    API-->>WebUI: Respond with task_id

    User->>WebUI: Polls task status
    WebUI->>API: GET /video/generations/{task_id}
    API->>JimengAdaptor: Build signed fetch request
    JimengAdaptor->>JimengAPI: POST /fetch_task_status
    JimengAPI-->>JimengAdaptor: JSON response (status, url, progress)
    JimengAdaptor-->>API: Return parsed status/result
    API-->>WebUI: Respond with status/progress/result
Loading
sequenceDiagram
    participant User
    participant WebUI
    participant API

    User->>WebUI: Opens Tokens Table
    WebUI->>API: GET /tokens
    API-->>WebUI: Return token list
    User->>WebUI: Selects tokens, clicks "Batch Delete"
    WebUI->>API: POST /token/batch (IDs)
    API-->>WebUI: Return deletion result
    WebUI->>User: Refreshes token list
Loading

Possibly related PRs

  • QuantumNous/new-api#1244: Adds support for the "Kling" video channel and task platform, paralleling this PR's Jimeng integration with similar architectural changes.
  • QuantumNous/new-api#1274: Introduces full support for the Jimeng video channel and related platform integration, closely matching the main PR's additions and refactors.
  • QuantumNous/new-api#1281: Refactors group ratio handling and quota calculation, including the UsingGroup field, which is also a major part of this PR.

Poem

A rabbit hops in code delight,
Jimeng joins the channel flight!
Compact tables, batch token sweep,
Group ratios now run deep.
Blur balls shimmer, markdown flows,
With every merge, the garden grows!
🐇✨

✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@feitianbubu
feitianbubu deleted the pr/alpha/video-action-constant branch June 27, 2025 15:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants