feitianbubu
246d62aa5e
chore: remove dead files resurrected by v1.0 launch commit ( #6041 )
...
controller/task_video.go and service/pre_consume_quota.go were already
removed in ba25ba88f and 116004fd4 (logic lives in service/task_polling.go
and BillingSession now), then brought back as stale copies by a42b39760 .
Both have zero callers.
controller/swag_video.go is a leftover swag stub: the swaggo pipeline is
gone and docs/openapi/relay.json already documents these routes.
2026-07-09 22:03:45 +08:00
feitianbubu
394b023dbf
fix: keep group ratio input as string draft to allow decimal typing ( #5995 )
...
The ratio column normalized input to number on every keystroke, so
typing 0.05 got stuck at 0.0 which Number() collapses to 0. Keep the
value as a string draft like the top-up ratio column and only convert
to number when serializing.
Fixes #5986
2026-07-07 21:12:54 +08:00
feitianbubu
043720f9be
fix: 任务差额结算后 quota 和阿里视频时长优化 ( #5923 )
...
* fix: apply default ali video duration when value is non-positive
* fix: persist task quota after async settlement
2026-07-06 11:49:24 +08:00
feitianbubu
f52b52b167
fix: align dynamic pricing style with log details dialog sections
2026-07-04 23:18:25 +08:00
feitianbubu
c1903607d5
fix: persist channel status filter across page navigation ( #5863 )
2026-07-03 14:43:27 +08:00
feitianbubu
0565e62679
fix: only treat 401 as session expiry in auth guard ( #5872 )
2026-07-03 14:43:12 +08:00
feitianbubu
986d90ae04
支持服务优雅关闭,避免重启回复中断和面板缓存数据丢失 ( #4258 )
...
* feat: add graceful shutdown with configurable timeout
* fix: flush quota dashboard cache on graceful shutdown
Persist the in-memory CacheQuotaData aggregation to the quota_data table
before process exit, so a restart no longer drops up to one DataExportInterval
window of dashboard data (issue #5679 ).
2026-07-02 21:53:09 +08:00
feitianbubu
759ab6bbca
fix: keep page state when switching tabs within the same route ( #5796 )
...
AnimatedOutlet keyed its motion container by the full pathname, so
navigating between params of the same route (e.g. the dashboard tabs
under /dashboard/$section) changed the key and remounted the route
component, discarding its in-memory state. The most visible symptom:
the dashboard time range resets to the default every time you switch
sub-tabs (Model Analytics / Flow / User Analytics).
Key the transition by the matched route id instead, so param-only
navigation re-renders in place while real page-to-page navigation
still plays the enter animation. This also preserves state across the
other $section tab pages (usage logs, models, system settings).
2026-07-02 21:36:23 +08:00
feitianbubu
e514db20f7
feat: support doubao seedance 2.0 safety_identifier/priority and 4k billing ( #5824 )
...
* feat: support safety_identifier and priority for doubao video
* feat: add 4k resolution billing tier for doubao video
2026-06-30 22:16:14 +08:00
feitianbubu
c8491b41bc
feat: bill doubao seedance-2.0 by output resolution and video input ( #5300 )
2026-06-30 21:09:09 +08:00
feitianbubu
d10fc762fa
fix(task): attribute async task usage log to the initiating node ( #5684 )
...
Async task usage logs (LogQuotaData node dimension) were recorded
under whichever node happened to poll the task to completion, not the
node that submitted it. For token/adaptor-billed video tasks the
pre-deduction is often 0, so the entire quota landed on the last
polling node.
Snapshot common.NodeName into TaskPrivateData at submit time and use
it when writing the settlement consume log; fall back to the current
node when empty so existing tasks stay compatible.
2026-06-26 21:48:23 +08:00
feitianbubu
35074345e8
chore(deps): sync bun.lock for dompurify 3.4.11 ( #5738 )
2026-06-26 19:01:05 +08:00
feitianbubu
3245b2b746
fix(model-pricing): refresh tiered expression editor when switching models ( #5752 )
...
Switching models in the pricing editor kept the previous model's tiers and prices in the expression panel: TieredPricingEditor seeds its internal visual/raw state only on mount, and the initRef guard never re-ran on prop changes, so only the model name updated.
Bump a reload token in the same effect that seeds billingExpr and use it as the editor's key, so a freshly loaded model remounts the editor and re-parses its expression. The token changes in lockstep with billingExpr, and user edits (which only touch state) do not trigger it.
Closes #5750
2026-06-26 18:57:08 +08:00
feitianbubu
0b2cf43e7b
fix(web): hide wallet entry in profile dropdown when wallet module disabled ( #5708 )
...
The profile dropdown rendered the wallet item unconditionally, so it
still showed after an admin disabled the personal/topup (wallet) sidebar
module. Reuse the sidebar module visibility check so the dropdown honours
the same toggle as the sidebar.
Fixes #5696
2026-06-24 19:45:10 +08:00
feitianbubu
354d0fedba
feat: default node name to hostname when NODE_NAME unset ( #5659 )
...
Fall back to the OS hostname when NODE_NAME is not configured, so node
identity in audit/usage logs is populated automatically. In container and
Kubernetes deployments the hostname equals the container ID or Pod name,
which stays unique under autoscaling without any manual per-instance config.
2026-06-22 18:08:00 +08:00
skynono
d58029c637
fix(model-pricing): 修复可视化模型定价列表项无法删除 ( #5628 )
...
删除时已从草稿中移除模型,但列表为 saved∪draft 并集且优先取 saved,
导致行不消失(isDraftDeleted 计算后未被使用),表现为无法删除。改为过滤
掉已暂存删除的行;并在删除当前正在编辑的行时关闭编辑器,避免从残留面板
保存又把模型写回。
2026-06-20 22:08:29 +08:00
skynono
0c6c1b373a
fix(wallet): 修复计费历史弹窗分页与列表重叠 ( #5627 )
...
base-ui 的 ScrollArea 仅靠 max-height 无法约束高度:其 Viewport 用
height:100%,当 Root 只有 max-height 而无确定高度时会回退为 auto,
内容撑满并溢出到 Root 之外,盖住下方分页。改用原生 max-h + overflow-y-auto
的 div,列表正确内部滚动,分页作为同级元素干净地排在下方。
2026-06-20 21:35:47 +08:00
skynono
7409174456
fix(log): 修复新前端日志按登录类型(type=7)筛选失效 ( #5620 )
...
路由 search 校验枚举 logTypeValues 漏了 '7'(登录),
选「登录」时 type=['7'] 校验失败被 .catch([]) 兜底成空数组,
最终请求丢掉 type 参数。补上 '7' 与 LOG_TYPE_ENUM.LOGIN 对齐。
2026-06-20 20:46:19 +08:00
skynono
dfcb74b52d
fix: stop repeated allow_wallet_overflow column migration on restart ( #5616 )
2026-06-20 12:41:20 +08:00
skynono
fae39cd90d
fix: stop repeated allow_balance_pay column migration on restart ( #5361 )
2026-06-20 12:41:02 +08:00
skynono
502858d35d
fix: 工具调用 arguments 为空时保留 tool_use 块 ( #5543 )
2026-06-17 17:07:05 +08:00
feitianbubu
17e342738e
feat: persist table rows-per-page across navigation and sessions
2026-06-09 22:53:16 +08:00
feitianbubu
580ad97c02
fix: convert usd amount by exchange rate in classic quota display
2026-06-03 22:23:12 +08:00
skynono
230a3592f8
perf: order admin logs by created_at to use composite index ( #5116 )
2026-05-30 20:00:02 +08:00
skynono
51b5cbe1bd
fix: prevent combobox from over-filtering options on focus ( #4829 )
2026-05-13 22:21:24 +08:00
skynono
fde2cac9d3
fix(web/default): guard playground messages against legacy classic shape ( #4650 )
...
fix(playground): handle legacy localStorage message shape
Sanitizes old-format saved messages to prevent 500 on playground load.
2026-05-12 16:23:33 +08:00
feitianbubu
02aacb38a2
feat: add user created_at and last_login_at
2026-04-25 12:44:44 +08:00
feitianbubu
63ce2db988
fix: model pricing use correct display type
2026-04-24 13:48:09 +08:00
feitianbubu
b60bc94f9c
feat: show last used time column in tokens table
2026-04-21 17:20:26 +08:00
feitianbubu
d15e14b117
feat: include admin username in quota adjustment logs
2026-04-13 16:09:59 +08:00
skynono
b4df9955f4
fix: isStream status in error logs instead of hardcoded false ( #4195 )
2026-04-12 17:41:26 +08:00
feitianbubu
b713e277cd
feat: metadata correct parse
2026-04-03 15:28:08 +08:00
feitianbubu
08a5243bbc
feat: TaskSubmitReq support Duration
2026-04-03 15:00:23 +08:00
feitianbubu
dafc7618c3
feat: add seedance fail reason
2026-04-02 12:26:44 +08:00
feitianbubu
22692b3f87
feat: seedance support seconds
2026-04-02 12:26:37 +08:00
feitianbubu
d36e892905
fix: seedance only one text
2026-04-02 12:26:33 +08:00
feitianbubu
3cd1ba4673
fix: seedance metadata override prompt
2026-04-02 12:26:27 +08:00
feitianbubu
b7c0f754ad
feat: add seedance2.0 video api
2026-04-02 12:24:24 +08:00
feitianbubu
e5b5331d3b
feat: wan 2.7 support N for gen images number
2026-04-01 17:39:50 +08:00
feitianbubu
18373c6eac
feat: add wan 2.7
2026-04-01 17:39:11 +08:00
feitianbubu
62b9aaa520
feat: prevent metadata from overriding model fields
2026-03-27 15:31:41 +08:00
feitianbubu
4e5e7b5828
feat: add logs content tooltip
2026-03-16 12:45:55 +08:00
feitianbubu
2e20ede2a0
fix: kling risk fail return openAIVideo error
2026-03-06 16:32:52 +08:00
feitianbubu
42500b3317
fix: fetch model add header passthrough rule key check
2026-03-05 17:49:36 +08:00
feitianbubu
4798165272
fix: update task billing log content to include reason
2026-03-03 12:37:43 +08:00
feitianbubu
c79c1f95fd
fix: use default model price for radio price model
2026-03-03 11:22:04 +08:00
skynono
b7ca7bf3ed
优化: 任务日志查询速度并显示用户详情 ( #2905 )
...
* perf: task log show userinfo
* feat: add Tooltip component to TaskLogsColumnDefs
2026-02-12 14:49:38 +08:00
feitianbubu
0427ddda03
feat: allow custom username for new users
2026-02-09 15:03:53 +08:00
feitianbubu
8db4b295c5
feat: add useTimeSeconds in error log
2026-02-03 18:42:27 +08:00
feitianbubu
109768441f
feat: CodeViewer click link and auto wrap
2026-01-30 11:18:58 +08:00
feitianbubu
88b7322483
feat: kling cost quota support use FinalUnitDeduction as totalToken
2026-01-28 18:42:13 +08:00
feitianbubu
eadae84d46
feat: auto-adapt video modal
2026-01-28 12:55:08 +08:00
feitianbubu
0823c16f97
feat: doubao add first and last image to video
2026-01-27 17:33:00 +08:00
feitianbubu
09be6d54e3
feat: task pre consume modelPrice default use setting value
2026-01-24 15:32:06 +08:00
feitianbubu
21c0a51dc3
feat: requestId time string use UTC
2026-01-22 08:58:35 +08:00
feitianbubu
5d8026c539
fix: video content api Priority use url field
2026-01-19 16:16:11 +08:00
feitianbubu
0f8ba448ce
fix: update warning threshold label from '5$' to '2$'
2026-01-19 12:58:10 +08:00
feitianbubu
d95f334c63
fix: jimeng i2v support multi image by metadata
2026-01-19 11:34:46 +08:00
feitianbubu
68c9890bb8
feat: task log show username
2026-01-10 23:23:29 +08:00
feitianbubu
c7ebd4408a
feat: add doubao video 1.5
2026-01-10 22:23:31 +08:00
feitianbubu
5334e6aec2
fix: CrossGroupRetry default false
...
移除gorm:"default:false",避免每次 AutoMigrate时都执行ALTER TABLE `tokens` MODIFY COLUMN `cross_group_retry` boolean DEFAULT false
且bool默认false不影响原有功能
2026-01-03 10:43:33 +08:00
feitianbubu
b9c3ced076
feat: flush response writer after copying body
2025-12-30 17:52:57 +08:00
feitianbubu
d014e0b471
fix: kling correct fail reason
2025-12-26 16:35:46 +08:00
skynono
7379b68f9f
feat: support first bind update password ( #2520 )
2025-12-26 13:59:56 +08:00
feitianbubu
1dc7ab9a97
fix: check claudeResponse delta StopReason nil point
2025-12-24 11:54:23 +08:00
feitianbubu
e030ac827a
feat: update price display use current currency symbol
2025-12-03 10:51:03 +08:00
feitianbubu
3901781068
fix: nano-banana not compatible imageSize
2025-11-29 00:58:25 +08:00
feitianbubu
e898e6aff3
feat: all video preview use videos/:id/content
2025-11-28 13:11:31 +08:00
feitianbubu
fb55d56089
feat: gemini image support edit
2025-11-27 16:04:04 +08:00
feitianbubu
70d74d74a4
feat: gemini video veo3.1 add task fail check
2025-11-26 21:56:14 +08:00
feitianbubu
ff19082c84
feat: gemini video veo3.1 add i2v
2025-11-26 21:56:13 +08:00
feitianbubu
156229ce92
fix: gemini image correct generationConfig
2025-11-26 15:54:11 +08:00
feitianbubu
2d6f8fb58f
feat: gemini-3-pro-image-preview add extra param
2025-11-26 12:03:24 +08:00
feitianbubu
796d62c605
feat: support gemini-3-pro-image-preview via images/generations
2025-11-26 12:03:24 +08:00
feitianbubu
edf76d3f2a
feat: channel by tag omit key
2025-11-19 19:25:27 +08:00
feitianbubu
010638a884
feat: add wan2.5-i2i-preview support
2025-11-14 20:30:18 +08:00
feitianbubu
aa2f027dea
feat: add hailuo i2v fl2v r2v
2025-11-14 11:55:43 +08:00
feitianbubu
c297f42c1a
feat: get hailuo video url
2025-11-14 11:55:43 +08:00
feitianbubu
b242d4c754
feat: add MiniMax Hailuo video
2025-11-14 11:55:43 +08:00
feitianbubu
29c719279a
feat: vidu reference2video only viduq2
2025-11-10 16:37:27 +08:00
feitianbubu
d0f13fab1c
feat: vidu specify reference2video via metadata action
2025-11-10 16:37:26 +08:00
feitianbubu
92f7cdeb40
fix: update tag normalization regex
2025-11-06 23:24:37 +08:00
feitianbubu
894ddc06ab
fix: trim suffix p for jimeng image model
2025-11-04 20:21:33 +08:00
feitianbubu
9893287f22
feat: jimeng_v30_pro only jimeng_ti2v_v30_pro model
2025-11-04 18:29:53 +08:00
feitianbubu
a1f9a1c872
fix: tag splitting by whitespace
2025-11-03 18:48:49 +08:00
feitianbubu
5f5ad45d8c
fix: ensure overwrite works correctly when no missing models
2025-11-03 17:50:00 +08:00
feitianbubu
2c84c79fbf
fix: stripe cancelURL topUp link
2025-10-30 13:41:52 +08:00
feitianbubu
ee75f0919a
fix: correct topUp link
2025-10-29 16:55:29 +08:00
feitianbubu
0fafcdca69
feat: topUp show correct symbol
2025-10-27 17:45:53 +08:00
feitianbubu
180a9b9187
fix: correct bool value for watermark
2025-10-25 11:26:03 +08:00
feitianbubu
e0cb9c1f66
feat: add image handling to image request for form-data
2025-10-23 23:24:37 +08:00
feitianbubu
86cd2802d5
fix: fail get moel by
...
multipart/form-data; boundary
2025-10-23 22:15:02 +08:00
feitianbubu
fe9b092b0b
feat: doubao-seedream support image edit
2025-10-23 21:19:33 +08:00
feitianbubu
a4c46e999e
feat: doubao-seedream-4-0-250828 image to image
2025-10-23 21:19:32 +08:00
feitianbubu
fd6cd838f7
refactor: clean up doubao tts code
2025-10-22 17:06:13 +08:00
feitianbubu
828bb17d2c
feat: doubao tts add is stream check
2025-10-22 13:39:16 +08:00
feitianbubu
23c22708f2
feat: doubao tts support streaming realtime audio
2025-10-22 13:39:16 +08:00
feitianbubu
f617ff8741
feat: openai tts support streaming realtime audio
2025-10-22 13:33:01 +08:00
feitianbubu
d52505cac1
feat: opt minimax tts req struct
2025-10-20 16:26:50 +08:00
feitianbubu
a2d34b9e47
feat: add minimax api adaptor
2025-10-20 16:26:50 +08:00