Skip to content

feat(logs): expose stream status to log owners - #6558

Merged
seefs001 merged 1 commit into
QuantumNous:mainfrom
seefs001:fix/user-stream-status
Jul 31, 2026
Merged

feat(logs): expose stream status to log owners#6558
seefs001 merged 1 commit into
QuantumNous:mainfrom
seefs001:fix/user-stream-status

Conversation

@seefs001

@seefs001 seefs001 commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator

⚠️ 提交说明 / PR Notice

Important

  • 请提供人工撰写的简洁摘要,避免直接粘贴未经整理的 AI 输出。

📝 变更描述 / Description

(简述:做了什么?为什么这样改能生效?请基于你对代码逻辑的理解来写,避免粘贴未经整理的内容)

向普通用户展示流中断和错误信息

🚀 变更类型 / Type of change

  • 🐛 Bug 修复 (Bug fix) - 请关联对应 Issue,避免将设计取舍、理解偏差或预期不一致直接归类为 bug
  • ✨ 新功能 (New feature) - 重大特性建议先通过 Issue 沟通
  • ⚡ 性能优化 / 重构 (Refactor)
  • 📝 文档更新 (Documentation)

🔗 关联任务 / Related Issue

  • Closes # (如有)

✅ 提交前检查项 / Checklist

  • 人工确认: 我已亲自整理并撰写此描述,没有直接粘贴未经处理的 AI 输出。
  • 非重复提交: 我已搜索现有的 IssuesPRs,确认不是重复提交。
  • Bug fix 说明: 若此 PR 标记为 Bug fix,我已提交或关联对应 Issue,且不会将设计取舍、预期不一致或理解偏差直接归类为 bug。
  • 变更理解: 我已理解这些更改的工作原理及可能影响。
  • 范围聚焦: 本 PR 未包含任何与当前任务无关的代码改动。
  • 本地验证: 已在本地运行并通过测试或手动验证,维护者可以据此复核结果。
  • 安全合规: 代码中无敏感凭据,且符合项目代码规范。

📸 运行证明 / Proof of Work

(请在此粘贴截图、关键日志或测试报告,以证明变更生效)

Summary by CodeRabbit

  • New Features
    • Stream status information is now visible in usage log details for all viewers.
    • Log details include stream status, end reasons, soft errors, end errors, and detailed error lists when available.

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b6ef45ee-46e1-41da-b519-77342c4ba7ff

📥 Commits

Reviewing files that changed from the base of the PR and between 0f9f668 and 813c522.

📒 Files selected for processing (2)
  • model/log.go
  • web/src/features/usage-logs/components/dialogs/details-dialog.tsx

Walkthrough

The change preserves stream_status in user-visible log metadata and displays non-OK stream details to all viewers, including end reasons, soft errors, end errors, and error lists.

Changes

Stream status visibility

Layer / File(s) Summary
Preserve and render stream status
model/log.go, web/src/features/usage-logs/components/dialogs/details-dialog.tsx
formatUserLogs retains stream_status. The details dialog renders non-OK stream status information for all viewers.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers: calcium-ion

Poem

Hop, hop, the status stays in sight,
Logs keep their stream details right.
Every viewer sees errors flow,
End reasons clearly show.
A rabbit cheers: “Now off we go!”

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes exposing stream status to log owners, which matches the primary change.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

Comment @coderabbitai help to get the list of available commands.

@seefs001
seefs001 merged commit 84834ee into QuantumNous:main Jul 31, 2026
4 checks passed
kimberxu pushed a commit to kimberxu/new-api that referenced this pull request Aug 1, 2026
Upstream 2026-07-31..2026-08-01: deepseek responses api (QuantumNous#6562),
zstd request decompression (QuantumNous#6545), log stream status (QuantumNous#6558),
tiered retry billing settlement (QuantumNous#6518, QuantumNous#6570), OAuth opener fix
(QuantumNous#6425), multipart image edit fix (QuantumNous#6559), public header nav style
(QuantumNous#6557).

Conflict resolution:
- controller/relay.go: keep per-channel rate limit check (custom) and
  upstream PrepareTieredBillingForSelectedGroup call
- relay/common/relay_info.go: keep RequestDebugSnapshot (custom) and
  upstream TieredBillingSnapshot comment
yiranxiaohui added a commit to yiranxiaohui/new-api that referenced this pull request Aug 1, 2026
Conflict resolutions and fork adaptations:
- relaykit move: fork imports updated (relay/helper claude_sampling,
  controller/invoice) to relaykit/dto; fork deltas in moved files
  (channel_settings HideUpstreamErrors, claude.go, user_settings.go
  invoice title, types/error.go) verified carried over.
- controller/relay.go: kept fork channel-concurrency acquire (upstream
  has no such feature) + upstream tiered-billing group-switch hooks.
- relay-claude.go / relay_responses*.go: kept fork model-mapping
  response rewrite, adopted upstream billable-tool counting and
  ImageGenerationCallCounter (replaces old image_generation_call c.Set
  in responses handlers).
- model/log.go: stream_status now visible to log owner (upstream QuantumNous#6558),
  fork still strips upstream_model_name/is_model_mapped for non-admins.
- model_mapped helpers: guard promoted ChannelMeta pointer fields
  (upstream refactor made ChannelMeta an embedded pointer; bare
  RelayInfo would panic in ReplaceResponseModel/GetResponseModelName).
- READMEs: upstream base with GHCR references reapplied.

Verified: go test ./... green (root + relaykit modules), frontend
typecheck green, bun frozen-lockfile check passes in the pinned CI
image, fork-added file audit ALL_PRESENT, no old-path remnants.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
0401lucky pushed a commit to 0401lucky/new-api that referenced this pull request Aug 2, 2026
bigfish9 added a commit to lanlingxiawu/new-api-er that referenced this pull request Aug 3, 2026
合并上游 16 个提交,主要是 token Auto 分组 (QuantumNous#6590)、deepseek responses API
(QuantumNous#6562)、Bedrock 客户端断开取消 (QuantumNous#6589)、分层重试计费加固 (QuantumNous#6518/QuantumNous#6570)、
zstd 请求解压 (QuantumNous#6545)、OIDC 自定义显示名 (QuantumNous#6012)、日志暴露 stream_status
(QuantumNous#6558)。

33 处冲突的处理:

- 11 个 legacy channel adaptor:上游删除 panic 之后的死代码以配合新增的
  go vet CI,本仓早已把整段 panic 换成返回 ErrLegacyAdaptorNotImplemented,
  已达成同一目的且不会让中继链路 panic,保留本仓实现。
- relay-aws.go 流式循环:两侧改动正交,合并保留 —— 上游的 ctx.Done() 取消
  分支(客户端断开时不再空转上游),加本仓的 finalizeClaudeOnError(提前
  返回时补发流终止符,否则 Claude 格式调用方会一直挂着)。
- 7 个 locale:两侧各自插入相邻 key,按字母序归并;上游 24 个新 key 与本仓
  1278 个 fork key 全部保留,逐一核对无丢失。
- keys / oauth / profile 前端:上游 Auto 分组为主体,叠加本仓改动;
  account-bindings-tab 与 oauth/$provider 保留本仓实现,理由见下。

测试取舍:

- 不引入 model/token_auto_groups_cache_test.go:它依赖上游的 truncateTables,
  该助手全局清表,与本仓行级清理原则冲突(共享库里有开发数据)。
- 不携带上游 controller/token_test.go:其迁移兼容测试会替换 model.DB 并在
  cleanup 里关闭,后续用 harness 连接的测试会拿到已关闭的句柄。按既有约定,
  token_auto_groups_test.go 需要的四个助手放进 zz_upstream_test_shims_test.go,
  其中 openTokenControllerTestDB 增加了 model.DB/LOG_DB 的成对保存还原。
  本仓原 token_test.go 的 controller 行为测试迁到
  gen_ctrl_token_handlers_test.go,与上游文件名脱钩以免再冲突。
- 三处断言随上游行为更新:stream_status 现对日志所有者可见;deepseek 的
  ConvertOpenAIResponsesRequest 已实现不再返回错误;计费路径判定收紧为
  「标记之外还需带对应 usage payload」,并补了三个反向用例锁住该语义。

遗留:oauth 绑定回调仍用 window.opener 判定 bind/login,上游 QuantumNous#6425 已改为
sessionStorage 标记 + state 比对。该修复要求 popup 先以 about:blank 打开再打
标记,本仓四个内置 provider 走 window.open(url) 直开,直接套用会让绑定永远
判成 login,故本次未采纳,需单独改造。
dreamlx added a commit to dreamlx/new-api that referenced this pull request Aug 3, 2026
Sync upstream/main (rc.11 → rc.23, 46 commits) into main. Key upstream
changes: QuantumNous#6369 relaykit module extraction (dto/types/service/relayconvert
moved to relaykit/ submodule with require+replace), QuantumNous#6518/QuantumNous#6570 tiered
retry billing, QuantumNous#6558 stream status exposed to log owners, QuantumNous#6562 DeepSeek
responses API, QuantumNous#6590 auto group, QuantumNous#6545 zstd decompression, per-channel
HTTP transport controls.

Conflicts resolved:
- constant/api_type.go, constant/channel.go: keep LH channel numbering
  (OspreyAI=58/HappyHorse=59/Seedance=60/AdvancedCustom=61 via reserved
  placeholders), append upstream Sub2API=62/NewAPI=63 before Dummy.
- relay/common/relay_info_test.go: union imports (LH common2/constant/gin
  + upstream convmeta/relaykit-types/assert), keep both test sets.

LH-only packages (ospreyai/happyhorse/seedance/task variants) had stale
host dto/types imports after relaykit extraction — migrated to
relaykit/dto and relaykit/types (task-family TaskError kept on host dto
via taskdto alias, matching upstream doubao pattern).

Co-Authored-By: Claude <noreply@anthropic.com>
speedxcc pushed a commit to speedxcc/new-api-speed that referenced this pull request Aug 4, 2026
合并官方上游 Calcium-Ion/new-api main 分支的 10 个新 commit:
- Feat/auto group (QuantumNous#6590)
- fix(aws): cancel Bedrock requests on client disconnect (QuantumNous#6589)
- fix(billing): harden tiered retry group-switch billing (QuantumNous#6570)
- fix(billing): settle tiered retries with final group (QuantumNous#6518)
- feat: deepseek responses api (QuantumNous#6562)
- fix(oauth): stop treating a foreign window.opener as a bind flow (QuantumNous#6425)
- fix(relay): preserve multipart image edits for New API channels (QuantumNous#6559)
- feat(logs): expose stream status to log owners (QuantumNous#6558)
- feat: support zstd request decompression (QuantumNous#6545)
- style: use text-sm for public header nav links (QuantumNous#6557)

冲突解决: model/option.go 的 switch case 区域,双方各自新增了选项注册
(我方 GroupPassThrough + 官方 MaxTokenAutoGroups),取并集保留两者。
其余文件均自动合并成功。

验证: go build + go test 全过(relay/helper、middleware、controller)
henrymartin262 pushed a commit to henrymartin262/new-api that referenced this pull request Aug 12, 2026
yuqiyi pushed a commit to yuqiyi/new-api that referenced this pull request Aug 16, 2026
* v1.0.0-rc.24: (117 commits)
  CI: enhance release synchronization workflow with optional file syncing
  fix: 修复兑换码额度精度损失 (QuantumNous#6685)
  feat(rate-limit): add user critical rate limit middleware for access token and aff transfer routes
  fix: test Claude/Gemini endpoints with native request format (QuantumNous#6698)
  feat(channels): refine fetched model categorization (QuantumNous#6632)
  Merge commit from fork
  refactor(relay): move replay metadata onto request bodies
  fix(relay): set Request.GetBody so the HTTP/2 transport can transparently retry after an upstream stream reset (QuantumNous#6249)
  Feat/auto group (QuantumNous#6590)
  fix(aws): cancel Bedrock requests on client disconnect (QuantumNous#6589)
  fix(billing): harden tiered retry group-switch billing (QuantumNous#6570)
  fix(billing): settle tiered retries with final group (QuantumNous#6518)
  feat: deepseek responses api (QuantumNous#6562)
  style: use text-sm for public header nav links to match other nav components (QuantumNous#6557)
  fix(oauth): stop treating a foreign window.opener as a bind flow (QuantumNous#6425)
  fix(relay): preserve multipart image edits for New API channels (QuantumNous#6559)
  feat(logs): expose stream status to log owners (QuantumNous#6558)
  feat: support zstd request decompression (QuantumNous#6545)
  fix: preserve Qwen thinking_budget passthrough (QuantumNous#5836)
  feat(oidc): 支持自定义 OIDC 登录显示名称 (QuantumNous#6012)
  ...

# Conflicts:
#	service/text_quota.go
#	web/src/features/models/components/drawers/model-mutate-drawer.tsx
#	web/src/features/pricing/components/model-details.tsx
#	web/src/features/pricing/lib/price.ts
refeiner pushed a commit to wuqiang44444444/new-api that referenced this pull request Aug 17, 2026
330079598 pushed a commit to 330079598/new-api that referenced this pull request Aug 19, 2026
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.

1 participant