Commit Graph
100 Commits
Author SHA1 Message Date
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
feitianbubu 0a8e54de20 feat: add minimax tts 2025-10-20 16:26:50 +08:00
feitianbubu 2f5d43fa61 feat: gemini veo req to struct 2025-10-18 21:55:25 +08:00
feitianbubu 18615abb55 feat: veo video url use proxy download 2025-10-18 21:55:25 +08:00
feitianbubu 8dfc987a87 feat: add gemini veo3.1 2025-10-18 21:55:25 +08:00
feitianbubu 13362887dd fix: doubao audio speedRadio to speed 2025-10-18 01:48:36 +08:00
feitianbubu 412b935a4d feat: AudioRequest add metadata support custom params 2025-10-18 01:48:36 +08:00