Calcium-Ion
3955d61b3e
Merge pull request #2477 from 1420970597/fix/anthropic-cache-billing
...
fix: 修复 Anthropic 渠道缓存计费错误
2025-12-24 16:59:23 +08:00
Seefs
07cb6e9626
Merge pull request #2493 from shikaiwei1/patch-1
2025-12-24 16:52:24 +08:00
Seefs
be047a7053
Merge pull request #2511 from JerryKwan/issue2499
2025-12-24 16:51:51 +08:00
Jerry
2504e9ad04
Resolving event mismatch in OpenAI2Claude
...
add stricter validation for content_block_start corresponding to
tool call
and fix the crash issue when Claude Code is processing tool call
2025-12-24 14:52:39 +08:00
Calcium-Ion
8ee5c23b48
Merge pull request #2510 from feitianbubu/pr/0e7050dc89c1b761069f5e528d8ecf786e7008ae
...
修复claudeResponse流式请求空指针Panic
2025-12-24 14:15:51 +08:00
feitianbubu
1dc7ab9a97
fix: check claudeResponse delta StopReason nil point
2025-12-24 11:54:23 +08:00
CaIon
d488a19ed7
feat(token): enhance error handling in ValidateUserToken for better clarity
2025-12-22 18:01:38 +08:00
John Chen
6dbe89f1cf
为Moonshot添加缓存tokens读取逻辑
...
为Moonshot添加缓存tokens读取逻辑。其与智普V4的逻辑相同,所以共用逻辑
2025-12-22 17:05:16 +08:00
Calcium-Ion
4bcdb1ec07
Merge pull request #2486 from QuantumNous/docs/readme-update-doc-links-new-routing
...
🔗 docs(readme): update documentation links to new site routing
2025-12-21 21:28:35 +08:00
t0ng7u
1f6527e91a
🔗 docs(readme): revert missing docs links to legacy site
...
Keep new-site links (/{lang}/docs/...) where matching pages exist in the current docs repo
Revert links that have no equivalent in the new docs to the legacy paths on doc.newapi.pro:
Google Gemini Chat
Midjourney-Proxy image docs
Suno music docs
Apply the same rule consistently across all README translations (zh/en/ja/fr)
2025-12-21 21:18:59 +08:00
t0ng7u
93b3cfc0f7
🔗 docs(readme): update documentation links to new site routing
...
- Replace legacy `docs.newapi.pro` paths with the new `/{lang}/docs/...` structure across all README translations
- Point key sections (installation, env vars, API, support, features) to their new locations
- Ensure language-specific links use the correct locale prefix (zh/en/ja) and keep FR aligned with English routes
2025-12-21 21:00:33 +08:00
Calcium-Ion
7af80ff043
Merge pull request #2483 from seefs001/fix/vertex-function-response-id
...
fix: 模型设置增加针对Vertex渠道过滤content[].part[].functionResponse.id的选项,默认启用
2025-12-21 17:24:07 +08:00
Seefs
45649249b2
fix: 在Vertex Adapter过滤content[].part[].functionResponse.id
2025-12-21 17:22:04 +08:00
Seefs
219b13af70
fix: 模型设置增加针对Vertex渠道过滤content[].part[].functionResponse.id的选项,默认启用
2025-12-21 17:09:49 +08:00
长安
6e3bc06fa6
fix: 修复 Anthropic 渠道缓存计费错误
...
## 问题描述
当使用 Anthropic 渠道通过 `/v1/chat/completions` 端点调用且启用缓存功能时,
计费逻辑错误地减去了缓存 tokens,导致严重的收入损失(94.5%)。
## 根本原因
不同 API 的 `prompt_tokens` 定义不同:
- **Anthropic API**: `input_tokens` 字段已经是纯输入 tokens(不包含缓存)
- **OpenAI API**: `prompt_tokens` 字段包含所有 tokens(包含缓存)
- **OpenRouter API**: `prompt_tokens` 字段包含所有 tokens(包含缓存)
当前 `postConsumeQuota` 函数对所有渠道都减去缓存 tokens,这对 Anthropic
渠道是错误的,因为其 `input_tokens` 已经不包含缓存。
## 修复方案
在 `relay/compatible_handler.go` 的 `postConsumeQuota` 函数中,添加渠道类型判断:
```go
if relayInfo.ChannelType != constant.ChannelTypeAnthropic {
baseTokens = baseTokens.Sub(dCacheTokens)
}
```
只对非 Anthropic 渠道减去缓存 tokens。
## 影响分析
### ✅ 不受影响的场景
1. **无缓存调用**(所有渠道)
- cache_tokens = 0
- 减去 0 = 不减去
- 结果:完全一致
2. **OpenAI/OpenRouter 渠道 + 缓存**
- 继续减去缓存(因为 ChannelType != Anthropic)
- 结果:完全一致
3. **Anthropic 渠道 + /v1/messages 端点**
- 使用 PostClaudeConsumeQuota(不修改)
- 结果:完全不受影响
### ✅ 修复的场景
4. **Anthropic 渠道 + /v1/chat/completions + 缓存**
- 修复前:错误地减去缓存,导致 94.5% 收入损失
- 修复后:不减去缓存,计费正确
## 验证数据
以实际记录 143509 为例:
| 项目 | 修复前 | 修复后 | 差异 |
|------|--------|--------|------|
| Quota | 10,489 | 191,330 | +180,841 |
| 费用 | ¥0.020978 | ¥0.382660 | +¥0.361682 |
| 收入恢复 | - | - | **+1724.1%** |
## 测试建议
1. 测试 Anthropic 渠道 + 缓存场景
2. 测试 OpenAI 渠道 + 缓存场景(确保不受影响)
3. 测试无缓存场景(确保不受影响)
## 相关 Issue
修复 Anthropic 渠道使用 prompt caching 时的计费错误。
2025-12-20 14:17:12 +08:00
CaIon
c2a6193497
feat(gin): improve request body handling and error reporting
2025-12-20 13:34:10 +08:00
CaIon
3523acfc2c
feat(init): increase MaxRequestBodyMB to enhance request handling
2025-12-20 13:27:55 +08:00
CaIon
f2d2b6e7fc
feat(channel): add error handling for SaveWithoutKey when channel ID is 0
2025-12-20 13:26:40 +08:00
Seefs
7a9cfa38ff
Merge pull request #2476 from TinsFox/chore/code-inspector-plugin
2025-12-20 11:04:40 +08:00
TinsFox
c06a216a14
chore: add code-inspector-plugin integration
2025-12-19 23:04:53 +08:00
Seefs
6d0cb5df75
Merge pull request #2474 from TinsFox/main
2025-12-19 21:39:56 +08:00
TinsFox
530b3eff11
style: add card spacing
2025-12-19 21:00:31 +08:00
Seefs
2f28f265a9
Merge pull request #2452 from QuantumNous/fix/oom-request-body-limit
2025-12-16 18:21:59 +08:00
t0ng7u
fa814b80fe
🧹 fix: harden request-body size handling and error unwrapping
...
Tighten oversized request handling across relay paths and make error matching reliable.
- Align `MAX_REQUEST_BODY_MB` fallback to `32` in request body reader and decompression middleware
- Stop ignoring `GetRequestBody` errors in relay retry paths; return consistent **413** on oversized bodies (400 for other read errors)
- Add `Unwrap()` to `types.NewAPIError` so `errors.Is/As` can match wrapped underlying errors
- `go test ./...` passes
2025-12-16 18:10:00 +08:00
t0ng7u
c2ed76ddfd
🛡️ fix: prevent OOM on large/decompressed requests; skip heavy prompt meta when token count is disabled
...
Clamp request body size (including post-decompression) to avoid memory exhaustion caused by huge payloads/zip bombs, especially with large-context Claude requests. Add a configurable `MAX_REQUEST_BODY_MB` (default `32`) and document it.
- Enforce max request body size after gzip/br decompression via `http.MaxBytesReader`
- Add a secondary size guard in `common.GetRequestBody` and cache-safe handling
- Return **413 Request Entity Too Large** on oversized bodies in relay entry
- Avoid building large `TokenCountMeta.CombineText` when both token counting and sensitive check are disabled (use lightweight meta for pricing)
- Update READMEs (CN/EN/FR/JA) with `MAX_REQUEST_BODY_MB`
- Fix a handful of vet/formatting issues encountered during the change
- `go test ./...` passes
2025-12-16 17:00:19 +08:00
Calcium-Ion
87195a07b0
Merge pull request #2445 from QuantumNous/feat/token-ip-whitelist-cidr
...
feat(auth): enhance IP restriction handling with CIDR support
2025-12-15 20:14:09 +08:00
CaIon
692b5ff5ac
feat(auth): refactor IP restriction handling to use clearer variable naming
2025-12-15 20:13:09 +08:00
CaIon
947a763a1a
feat(auth): enhance IP restriction handling with CIDR support
2025-12-15 17:24:09 +08:00
CaIon
1bd0d8de02
Revert "feat(audio): replace SysLog with logger for improved logging in GetAudioDuration"
...
This reverts commit 2a980bbcf5 .
2025-12-14 00:04:40 +08:00
CaIon
2a980bbcf5
feat(audio): replace SysLog with logger for improved logging in GetAudioDuration
2025-12-13 23:59:58 +08:00
CaIon
da0d3ea93c
fix(audio): improve WAV duration calculation with enhanced PCM size handling
2025-12-13 23:57:32 +08:00
CaIon
06d1bd404b
feat(model_ratio): add default ratios for gpt-4o-mini-tts
2025-12-13 19:14:27 +08:00
CaIon
284ce42c88
refactor(channel_select): improve retry logic with reset functionality
2025-12-13 18:09:10 +08:00
Calcium-Ion
ef5e4a056c
Merge pull request #2434 from QuantumNous/feat/gpt-4o-mini-tts
...
feat: support gpt tts series model quota calculate
2025-12-13 17:55:16 +08:00
CaIon
3822f4577c
fix(audio): correct TotalTokens calculation for accurate usage reporting
2025-12-13 17:49:57 +08:00
CaIon
be2a863b9b
feat(audio): enhance audio request handling with token type detection and streaming support
2025-12-13 17:24:23 +08:00
CaIon
29565c837f
feat(token): add CrossGroupRetry field to token insertion
2025-12-13 16:45:42 +08:00
CaIon
a1299114a6
refactor(error): replace dto.OpenAIError with types.OpenAIError for consistency
2025-12-13 16:43:57 +08:00
CaIon
6175f254a2
refactor(channel_select): enhance retry logic and context key usage for channel selection
2025-12-13 16:43:38 +08:00
CaIon
7d586ef507
fix(helper): improve error handling in FlushWriter and related functions
2025-12-13 13:29:21 +08:00
CaIon
e0a79e853d
refactor(auth): replace direct token group setting with context key retrieval
2025-12-13 01:38:12 +08:00
Calcium-Ion
6e998eaf82
Merge pull request #2430 from QuantumNous/fix/cross-group-retry
...
fix(channel_select): adjust priority retry logic for cross-group
2025-12-13 01:05:40 +08:00
CaIon
51f3a936e4
fix(channel_select): adjust priority retry logic for cross-group channel selection
2025-12-13 01:04:10 +08:00
Calcium-Ion
2a01d1c996
Merge pull request #2429 from QuantumNous/feat/xhigh
...
feat(adaptor): add '-xhigh' suffix to reasoning effort options
2025-12-12 22:06:19 +08:00
CaIon
413968a0fd
refactor(relay): update channel retrieval to use RelayInfo structure
2025-12-12 22:04:38 +08:00
Calcium-Ion
281ebacb8c
Merge pull request #2424 from ion1ze/main
...
fix: correct sender format issues fix #1347
2025-12-12 20:55:22 +08:00
CaIon
27dd42718b
feat(adaptor): add '-xhigh' suffix to reasoning effort options for model parsing
2025-12-12 20:53:48 +08:00
Calcium-Ion
3c5edc54b7
Merge pull request #2426 from QuantumNous/feat/auto-cross-group-retry
...
feat(token): add cross-group retry option for token processing
2025-12-12 20:45:54 +08:00
Calcium-Ion
8b0e710053
Merge pull request #2428 from seefs001/fix/health-check
...
fix: health check
2025-12-12 20:45:34 +08:00
Seefs
ae30b4d15f
fix: health check
2025-12-12 20:37:32 +08:00