Add candidate user selection and explicit_ids batch creation flow for overseas migration. Also add cancellable batches to release selected-user locks and extend backend, frontend, and e2e coverage for the new flow.
Co-Authored-By: Codex <noreply@anthropic.com>
- Remove advanced ratio columns from the table
- Add 'advanced ratios' button in action column
- Add edit modal with Form.InputNumber fields (same as visual editor)
- Table stays clean, advanced settings only visible on click
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add cache/image/audio ratio columns to the table
- Add advanced ratio fields to the add model modal
- Update data init, submit, and addModel to handle new fields
- Use formRef to read InputNumber values (same fix as visual editor)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace || with ?? in addOrUpdateModel to keep 0 values (0 || '' = '')
- Add null check in SubmitData to avoid writing undefined
- Fix formRef value reading to preserve 0 vs empty distinction
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Form.InputNumber values were not synced to currentModel state via
onChange, so the advanced ratio fields were always empty when saving.
Now reads values directly from formRef in onOk handler.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add cacheCreationRatio !== 0 check for row data
- Add hasCacheCreationPricing check for column visibility
- Models with cache read but no cache creation (e.g. Gemini) no longer
show empty cache creation price column
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add extraText for cache read ratio and cache creation ratio fields
- Update placeholder format to match channel pricing convention
- Add missing i18n translations for extraText and new placeholders
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add 5 new fields to output object
- Convert model data to float and populate output fields
- Serialize all fields to JSON in finalOutput
- Submit 7 total option fields (2 existing + 5 new)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add 5 advanced ratio fields to updatedModel object
- Use empty string fallback for undefined values
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add 5 advanced ratio fields to formRef.current.setValues
- Ensure existing ratio data displays correctly in edit modal
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add Form.Section with 5 advanced ratio input fields
- Configure min={0}, step={0.01} for all fields
- Add placeholders showing default values
- Only show when pricingMode === 'per-token'
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Parse 5 new JSON fields from props.options
- Extend modelNames Set to include keys from all ratio fields
- Add 5 new fields to model data objects
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add Chinese translations for 5 advanced ratio fields
- Add English translations for 5 advanced ratio fields
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 9 detailed tasks covering i18n, data, UI, and testing
- Each task broken into 2-5 minute steps with exact code
- Complete validation and troubleshooting sections
- Estimated 2.5 hours total implementation time
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add unit tests for group ratio, cross-group retry, and price calculation:
- Group ratio CRUD and special ratio override (12 tests)
- HandleGroupRatio with auto-group and special ratios (5 tests)
- ModelPriceHelper with group ratio in price/ratio modes (3 tests)
- Channel selection priority, groups, weighted LB (6 tests)
- RetryParam and AutoGroup service logic (7 tests)
Also restore the group pricing card in model detail SideSheet.
Backend endpoints were removed but frontend still called them causing
404s. ChannelPricingCard no longer fetches, channelPricingApi and
pricingTagApi return empty stubs to keep dependent components stable.
Replace bytes.Replace with gjson.GetBytes+sjson.SetBytes in passthrough
mode to correctly handle JSON whitespace variations and avoid silently
sending empty body on read errors. Also add log search count limit to
prevent slow COUNT queries on large log tables.
Expose channel public_name in the edit modal and load a larger channel page when building model settings views.
Co-Authored-By: Codex <noreply@anthropic.com>
Use adaptive thinking for Claude requests and rewrite passthrough bodies that still contain the legacy enabled type.
Co-Authored-By: Codex <noreply@anthropic.com>
Reject redemption requests from synced users, surface a localized API message, and cover both model- and controller-level paths with tests.
Co-Authored-By: Codex <noreply@anthropic.com>
Delete leftover channel pricing controllers and routes after removing channel pricing, and align relay price helpers with global pricing plus user channel ratio only.
Co-Authored-By: Codex <noreply@anthropic.com>