Commit Graph

442 Commits

Author SHA1 Message Date
fawney19
b8a6feef4a Merge remote-tracking branch 'origin/pr/377' into codex/pr-376-377-383-384-combined
# Conflicts:
#	apps/aether-gateway/src/tests/frontdoor/public_support/dashboard.rs
#	crates/aether-data/src/lifecycle/backfill.rs
#	crates/aether-data/src/repository/usage/postgres/mod.rs
2026-05-06 02:36:57 +08:00
fawney19
be580c35bb chore: resolve pr 377 checks 2026-05-06 02:22:32 +08:00
fawney19
cf27773582 feat: improve admin performance analysis 2026-05-06 02:01:32 +08:00
fawney19
6083461822 Add editable response header rules 2026-05-06 01:29:42 +08:00
fawney19
3264857e4a fix(usage): repair aggregate usage statistics 2026-05-06 01:13:23 +08:00
fawney19
6dd7464793 Merge remote-tracking branch 'origin/aether-rust-pioneer' into pr-375-session-scope 2026-05-05 22:34:47 +08:00
fawney19
f959f02d40 Implement transport profile routing 2026-05-05 22:21:23 +08:00
fawney19
98421126f2 refactor: carry normalized client session affinity 2026-05-05 21:34:17 +08:00
fawney19
ddf3fb6f63 refactor: introduce client session scope abstraction 2026-05-05 20:58:42 +08:00
fawney19
aacab1a90c Merge remote-tracking branch 'origin/aether-rust-pioneer' into aether-rust-pioneer
# Conflicts:
#	crates/aether-data-contracts/src/repository/usage/mod.rs
#	crates/aether-data/src/repository/global_models/postgres.rs
#	crates/aether-data/src/repository/usage/postgres/mod.rs
2026-05-05 18:53:14 +08:00
fawney19
fce7e959e5 Add multi-database data layer
Introduce aether-data-schema and driver-specific schema generation for Postgres, MySQL, and SQLite.

Split data backends, lifecycle, repositories, and gateway runtime integration across database drivers.

Verified with cargo fmt --all --check, cargo clippy --workspace --all-targets -- -D warnings, and cargo test --workspace.
2026-05-05 18:27:36 +08:00
mayrain
6b6d32b4a3 feat(usage): 新增输出速度统计与请求详情性能分析
- 把 upstream_is_stream 物化到 usage 与 billing facts,避免 Provider 聚合回连 public.usage
- 统一前端标准/流式 TPS 计算与显示,流式按首字后生成耗时计算
- 新增请求详情抽屉展示单请求输出速度与 Provider 聚合 TPS
2026-05-05 17:34:12 +08:00
mayrain
53fa33b0c5 fix(dashboard): 修复仪表盘与明细统计数值不一致并重建 cost_savings 聚合
- 统一 dashboard 聚合与 raw 查询的 token 计算,拆分今日节省和周期节省
- cache savings 改用 input price 估算未命中成本,修复历史 cost_savings 偏高
- raw 查询 total_tokens 改用 effective_input + output + cache_creation + cache_read 公式
- 新增独立 backfill 重建历史 cost_savings 聚合表,保留已发布 backfill 不变
2026-05-05 17:33:16 +08:00
fawney19
825c1b496d Merge pull request #374 from Entropy-Xu/codex/provider-performance-stats
feat(stats): 添加 Provider 性能统计分析
2026-05-05 13:16:06 +08:00
fawney19
ccde3d4045 style(gateway): format secret masking changes 2026-05-05 13:04:56 +08:00
fawney19
f7071967c0 fix(gateway): mask catalog secrets on char boundaries 2026-05-05 12:48:19 +08:00
RWDai
657f9f0be1 fix: carry session affinity through Gemini files 2026-05-05 12:25:07 +08:00
RWDai
628329e493 fix: scope scheduler effects by session 2026-05-05 12:25:07 +08:00
RWDai
82e7a0080e fix: prefer client session adapters 2026-05-05 12:25:07 +08:00
Entropy.Xu
ff1ed8b57d feat(stats): 添加 Provider 性能统计分析 2026-05-05 11:24:16 +08:00
RWDai
5fcb49b08e feat: wire specialized planner session affinity 2026-05-05 11:23:54 +08:00
RWDai
044ef59d81 feat: wire OpenAI responses session affinity 2026-05-05 11:23:54 +08:00
RWDai
51b191ad2c feat: wire OpenAI chat session affinity 2026-05-05 11:23:54 +08:00
RWDai
e890a5c2f1 feat: wire standard family session affinity 2026-05-05 11:23:54 +08:00
RWDai
591dcf5cf2 feat: carry session affinity through candidate materialization 2026-05-05 11:23:54 +08:00
RWDai
58d6b2add6 feat: scope planner affinity cache by session 2026-05-05 11:23:54 +08:00
RWDai
bcd542f7ee feat: pass session affinity through planner inputs 2026-05-05 11:23:54 +08:00
RWDai
37da4e245a feat: scope tunnel affinity by client session 2026-05-05 11:23:54 +08:00
RWDai
9ef7952da5 fix: keep scheduler affinity out of runtime checks 2026-05-05 11:23:54 +08:00
RWDai
eb8878695a feat: thread session affinity through scheduler selection 2026-05-05 11:23:54 +08:00
RWDai
c596d82dec feat: pass session scope into scheduler cache 2026-05-05 11:23:54 +08:00
RWDai
96dd3fa4ca feat: add gateway session affinity adapters 2026-05-05 11:23:54 +08:00
fawney19
627eb4f335 Merge pull request #371 from Kayphoon/feature/embedding-model-support
feat: add embedding and rerank support
2026-05-04 12:56:11 +08:00
fawney19
099653f732 Cap Codex pool cooldowns and add key circuit breaker 2026-05-04 02:15:32 +08:00
fawney19
1d62722d47 Improve Codex model fetching 2026-05-04 01:16:56 +08:00
fawney19
fb642f7d62 feat: improve OAuth provider configuration 2026-05-04 00:18:05 +08:00
fawney19
cb5b8ee1ee Use Rust build metadata for system version 2026-05-03 22:06:16 +08:00
fawney19
b4a8c5dde2 Format execution runtime transport imports 2026-05-03 21:52:15 +08:00
fawney19
53a5e18b20 Merge pull request #370 from yao177/aether-rust-pioneer
fix(proxy): record manual proxy node traffic
2026-05-03 21:40:20 +08:00
fawney19
6f00cabe96 Lazy load requested model candidates 2026-05-03 20:56:31 +08:00
fawney19
a24e4a793d Refactor pool candidate scheduling 2026-05-03 20:14:29 +08:00
Yao177
c3d97b8c16 fix(proxy): record manual proxy node traffic
- add manual proxy traffic mutations to the data layer
- record sync and stream outcomes for manual proxy requests
- prevent tunnel proxy nodes from receiving manual traffic updates
2026-05-03 18:38:04 +08:00
Kayphoon
5abe664d65 feat: add embedding and rerank support 2026-05-03 17:32:41 +08:00
jiuwovo-ai
3e2eca4fd0 fix: 修复手动代理节点请求不计数及延迟/心跳不显示的问题 (#368)
* fix: 修复手动代理节点请求不计数及延迟/心跳不显示的问题

问题描述:
- 手动添加的代理节点请求数始终为0,不会递增
- 手动代理节点的延迟和最后心跳时间不显示

根因:
Rust 重写版中缺失了 Python 版的手动代理节点请求计数逻辑。
隧道节点通过心跳上报计数,但手动节点没有心跳机制,
需要在 usage recording 路径中递增计数并更新延迟信息。

修复方案:
1. 在 ExecutionPlan 中提取 proxy 信息,注入到 request_metadata
2. 在 request_metadata 白名单中添加 proxy 字段
3. 新增 INCREMENT_MANUAL_PROXY_NODE_REQUESTS_SQL,
   递增 total_requests/failed_requests,
   同时更新 avg_latency_ms 和 last_heartbeat_at
4. 在 ProxyNodeWriteRepository trait 新增 increment_manual_node_requests 方法
5. 在 write_event_record 中解析 request_metadata 中的 proxy 信息,
   对非隧道模式的手动节点调用递增方法
6. 为 GatewayDataState 实现 ManualProxyNodeCounter trait

影响范围:
- 仅影响手动代理节点的统计数据
- 隧道节点不受影响(继续通过心跳计数)
- 不影响请求转发逻辑

* style: cargo fmt

---------

Co-authored-by: root <root@ser406777952330.local>
2026-05-03 14:50:36 +08:00
fawney19
c4ea042eb4 feat: add model directive management 2026-05-03 14:48:25 +08:00
Kayphoon
fe27fb17fb feat: add provider-key concurrent limit (#352)
* feat: add provider-key concurrent limit

* Fix provider key concurrent limit checks

---------

Co-authored-by: fawney19 <elky0401@gmail.com>
2026-05-03 01:55:23 +08:00
fawney19
e3ea2d1451 feat: configure auth channel mismatch formats 2026-05-03 00:49:22 +08:00
fawney19
3a770306cc refactor: separate request auth channel from route kind
Extract request_auth_channel as a distinct routing dimension to distinguish
between api_key and bearer_like authentication methods. This improves routing
clarity by decoupling authentication mechanism from route classification.
2026-05-02 21:23:33 +08:00
fawney19
47ee8b9c13 refactor: fold ai surfaces into formats 2026-05-02 18:19:39 +08:00
jiuwovo-ai
bfd1ea72b3 fix: codex free accounts incorrectly marked as quota exhausted (#366)
* fix: codex free accounts incorrectly marked as quota exhausted when skip_exhausted_accounts enabled

- Cross-validate stored exhausted flag against window used_ratio in snapshot reader
- Guard has_credits:false check with window data presence in upstream_metadata fallback
- Add windows.is_empty() precondition to exhausted_by_credits in snapshot builder

Free codex accounts have has_credits:false (they use window-based quotas, not credits),
but the old logic treated this as credits depleted, skipping actual window usage checks.
This caused all free accounts to be incorrectly marked exhausted.

* test: cover codex free quota windows

---------

Co-authored-by: root <root@ser488556369540.local>
Co-authored-by: fawney19 <elky0401@gmail.com>
2026-05-02 14:11:29 +08:00