fawney19
|
586d2cc42b
|
fix(tunnel): 为 hub reader body 推送添加超时, 防止流间 head-of-line blocking
push_body_chunk 原先使用无超时的 channel send, 当消费端慢时会阻塞
整条 proxy 连接的 reader, 导致同连接上其他 stream 的帧无法路由。
添加 5 秒超时后, 单个 stream 的背压不再影响其他 stream。
|
2026-04-16 02:11:32 +08:00 |
|
fawney19
|
1fd1f8216d
|
fix(gateway): 补充 example 中缺失的 idle_timeout 字段
|
2026-04-16 01:14:49 +08:00 |
|
fawney19
|
0c3f730852
|
fix(testkit): 补充 TunnelConnConfig 缺失的 idle_timeout 字段
|
2026-04-16 01:09:53 +08:00 |
|
fawney19
|
b678132176
|
fix(tunnel): 默认禁用 proxy idle timeout (设为 0)
保留 idle timeout 机制但默认不启用,避免误断连。
|
2026-04-16 00:56:24 +08:00 |
|
fawney19
|
e4be1d6b56
|
Revert "refactor(tunnel): 移除 proxy 连接 idle timeout 机制"
This reverts commit b004551fe5.
|
2026-04-16 00:53:40 +08:00 |
|
fawney19
|
5f0fba1807
|
diag(tunnel): writer/reader 帧计数诊断日志
- writer task 记录发送帧数、Binary 帧大小、send 失败原因
- reader 记录接收帧总数,disconnect 时输出
- 用于定位 gateway→proxy 数据流是否正常
|
2026-04-16 00:31:10 +08:00 |
|
fawney19
|
205f78b39c
|
style: cargo fmt
|
2026-04-15 23:54:14 +08:00 |
|
fawney19
|
5aa8883865
|
fix(tunnel): gateway 回复 WebSocket Pong 防止 proxy stale 断连
gateway reader 之前用 `_ => {}` 忽略了 proxy 发来的 WebSocket Ping,
导致 proxy 的 stale_timeout (5s) 持续触发断连重连循环,
所有隧道请求都因等待 response headers 超时而失败。
同时补充 hub 诊断日志和连续请求集成测试。
|
2026-04-15 23:45:22 +08:00 |
|
fawney19
|
1e2c3fc4fc
|
fix(tunnel): 移除 testkit 和 example 中残留的 idle_timeout 引用
|
2026-04-15 22:18:41 +08:00 |
|
fawney19
|
b004551fe5
|
refactor(tunnel): 移除 proxy 连接 idle timeout 机制
idle timeout 在实际使用中容易误断活跃连接,移除该逻辑并简化 reader 循环。
|
2026-04-15 22:10:30 +08:00 |
|
fawney19
|
704858390d
|
feat(gateway): 流式执行支持 local tunnel 传输并改进 SSE 错误通知
- 流式执行优先尝试 local tunnel 路径,不可用时降级到直连
- stream_pump 适配 Reqwest 和 LocalTunnel 双响应类型
- SSE passthrough 流中断时向下游发送 aether.error 终端事件
- 提取 frame 编码辅助函数消除重复代码
- 新增本地隧道流式场景的集成测试
|
2026-04-15 21:10:16 +08:00 |
|
fawney19
|
c569081340
|
fix(usage): streaming 状态在首字节到达前显示为 pending
新增 resolveDisplayRequestStatus 函数,当记录状态为 streaming 但
first_byte_time_ms 为空时回退显示为 pending,避免误导用户。
|
2026-04-15 17:50:45 +08:00 |
|
fawney19
|
77d413d777
|
tune(tunnel): 调整 tunnel 超时与连接池参数,增加冗余连接下限
- Gateway: 增大 idle timeout 至 2s、ping interval 至 500ms
- Proxy: 统一 reconnect/ping/stale 超时为常量,降低 reconnect_max 至 250ms
- 自动连接池引入 redundant floor(2),保证低负载时也有冗余连接
|
2026-04-15 16:27:42 +08:00 |
|
fawney19
|
43e7ad112f
|
perf(usage): user-me usage 查询避免全量加载,默认限制 7 天范围
- UsageAuditListQuery 新增 limit 字段,支持在 SQL 层 LIMIT
- user-me usage 端点无时间范围时默认查最近 7 天
- active usage 端点无 ids 过滤时限制查最近 1 小时
- InMemory 实现同步支持 limit truncate
|
2026-04-15 16:25:57 +08:00 |
|
fawney19
|
fbb8249c0d
|
fix(gateway): 改进流式传输稳定性
- stream_pump 读取错误时记录完整错误链并输出 warn 日志
- hub body 转发从 try_send 改为 async send,支持背压避免丢帧
- tunnel_stale_timeout 默认值从 900ms 提升到 10s,减少误判过期
|
2026-04-15 14:26:57 +08:00 |
|
fawney19
|
707d9ac274
|
perf(gateway): 流式处理代码层性能优化
- 将 spawn 内 buffered_body 从 Vec<u8> 改为 VecDeque<u8>, drain 前端从 O(n) 变 O(1)
- 消除 prefetched body/chunks 的不必要 clone, 改为直接 move
- Pending/Streaming 非终态候选状态写入改为 tokio::spawn fire-and-forget
- 连接池默认 max_connections 从 30 提升到 50
|
2026-04-15 11:55:45 +08:00 |
|
fawney19
|
026a77306c
|
fix(schema): 移除 api_keys.concurrent_limit 的默认值 5
之前 DEFAULT 5 导致所有新建 API Key 自动带上并发限制,
改为 NULL (不限制) 以匹配预期行为。
|
2026-04-15 10:43:38 +08:00 |
|
fawney19
|
4087e096f2
|
fix(usage): 为 InMemory 仓库补充 status 过滤逻辑
|
2026-04-15 09:53:52 +08:00 |
|
fawney19
|
8827c46c33
|
perf(usage): 将 status 过滤下推到 SQL 查询层
为 UsageAuditListQuery 新增 statuses 字段,支持在数据库端按状态
筛选用量记录。admin usage summary 路由不再全量拉取后内存过滤,
改为直接查询 pending/streaming 状态的记录。
|
2026-04-15 09:30:42 +08:00 |
|
fawney19
|
adde9ff237
|
chore(proxy): bump version to 0.3.0
|
2026-04-15 08:46:19 +08:00 |
|
fawney19
|
cfb4f4582b
|
perf(gateway): 限制流式响应体缓冲区大小为 256KB
流式转发过程中 provider 和 client 的 body buffer 可能无限增长,
对长响应造成内存压力。添加 256KB 上限, 超出时截断早期数据,
并在上报日志中跳过已截断的 body 以避免输出不完整内容。
|
2026-04-15 08:46:19 +08:00 |
|
github-actions[bot]
|
8bb637962f
|
chore(proxy): update download links for proxy-v0.3.0
|
2026-04-14 19:11:01 +00:00 |
|
fawney19
|
67a2ca6e31
|
perf(gateway): 为 dashboard 接口添加短时响应缓存
新增 DashboardResponseCache,对 stats/daily_stats/provider_status
三个接口按用户维度缓存 15-30 秒,减少重复数据库查询。
|
2026-04-15 03:03:20 +08:00 |
|
fawney19
|
98ad1172b0
|
perf(usage): heatmap 改为数据库端按天聚合查询
将 admin 和 user heatmap 从逐条加载 usage audit 记录后在应用层聚合,
改为通过 SQL GROUP BY DATE 在数据库端直接按天汇总, 大幅减少数据传输量。
新增 UsageDailyHeatmapQuery / StoredUsageDailySummary 类型,
在 trait、SQL、内存实现中均补齐 summarize_usage_daily_heatmap 方法。
同时优化 docker-compose: postgres 增加空闲事务超时与 keepalive 参数,
gateway 增加健康检查配置。
|
2026-04-15 02:11:32 +08:00 |
|
fawney19
|
05fbbac493
|
feat(proxy): 支持配置 private 目标地址放行
|
2026-04-15 00:31:36 +08:00 |
|
fawney19
|
a4e7ac1df6
|
feat(proxy): 重构 Proxy 节点管理与隧道系统
- 重构 proxy_nodes 管理端,支持节点注册、心跳、隧道生命周期管理
- 增强 tunnel 嵌入式 hub 和隧道协议
- 重构 aether-proxy 配置、隧道客户端、心跳和调度机制
- 调整 admin OAuth/配额/导入等处理器的参数传递
- 扩展数据迁移模块
- 补充 proxy nodes、OAuth、配额、系统导入等测试
- 更新前端 proxy nodes 视图和 API
|
2026-04-14 22:51:02 +08:00 |
|
AAEE86
|
fb31928e44
|
fix(mapping): 对齐全局模型映射的正则匹配行为与范围 (#296)
- scheduler_core: `matches_model_mapping` 改为大小写不敏感且整串匹配,并补充单测
- global model routing 预览:
- Key 过滤增加 `allowed_models + model_mappings` 校验
- `all_keys_whitelist` 改为收集全站活跃 Provider 的活跃 Key 白名单
- provider mapping-preview:
- 优先使用 admin 全量 GlobalModel(含非激活)参与映射
- admin 数据为空时回退 public 模型,保持兼容
- public models 匹配逻辑统一复用 scheduler_core 实现,避免行为分叉
- 更新网关测试,覆盖未关联 Provider 的 Key 也进入 whitelist 的场景
|
2026-04-14 21:58:52 +08:00 |
|
fawney19
|
47bf1d04a1
|
fix(admin): 补齐 key 自动获取模型的即时刷新场景 (#295)
- 新增 key 且开启自动获取时立即抓取并写回 allowed_models
- 自动获取已开启时修改包含/排除规则后立即刷新 allowed_models
- 补充创建与过滤规则变更场景的控制层回归测试
v0.7.0-rc6
|
2026-04-14 14:56:22 +08:00 |
|
AAEE86
|
b70f32c6c2
|
fix(dashboard): 使用有效输入口径展示今日 Token (#294)
将仪表盘“今日 Token”卡片中的输入项改为有效输入口径。
对 OpenAI/Gemini 从 input_tokens 中扣除 cache_read_tokens,
Claude 保持原始输入口径不变。
同步更新 dashboard 集成测试,覆盖 OpenAI 与 Claude 的差异化行为。
|
2026-04-14 14:53:59 +08:00 |
|
fawney19
|
21ac1825f3
|
fix(gateway): 修正 Codex 实时配额同步
Close #293
Co-authored-by: AAEE86 <ppk0227@hotmail.com>
|
2026-04-14 14:51:26 +08:00 |
|
AAEE86
|
0081622f90
|
fix(gateway): 补齐 Codex 普通请求的实时配额同步
在 usage reporting 的 sync/stream 终态处理链中补充 Codex 配额回写,
将普通请求响应头中的 x-codex-* 实时同步到 key.upstream_metadata.codex。
- 复用 parse_codex_usage_headers 解析配额头
- 仅对 codex provider 执行 best-effort 回写
- 增加 30s TTL 指纹去重,忽略 reset 倒计时等波动字段
- 补充 realtime helper 单测与 sync/stream 集成测试
|
2026-04-14 14:40:48 +08:00 |
|
AAEE86
|
d089ed22c7
|
fix(admin): 补齐 key 自动获取模型的即时刷新场景
- 新增 key 且开启自动获取时立即抓取并写回 allowed_models
- 自动获取已开启时修改包含/排除规则后立即刷新 allowed_models
- 补充创建与过滤规则变更场景的控制层回归测试
|
2026-04-14 14:33:45 +08:00 |
|
fawney19
|
861ae81ff0
|
feat(admin): 完善代理节点与 OAuth 授权管理
|
2026-04-14 14:09:24 +08:00 |
|
fawney19
|
593640ac19
|
feat(gateway): 增强候选路由策略与可观测信息
|
2026-04-14 11:50:52 +08:00 |
|
fawney19
|
62e0a0338d
|
refactor: 移除 shadow results 相关模块和接口
|
2026-04-14 09:46:16 +08:00 |
|
fawney19
|
5fd3240fcf
|
fix(admin): 同步 key 自动获取模型与相关测试
Closes #292
Co-authored-by: AAEE86 <ppk0227@hotmail.com>
v0.7.0-rc5
|
2026-04-14 02:34:36 +08:00 |
|
AAEE86
|
563dd44957
|
test(gateway): 稳定本地 usage 终态断言
- 为 usage local 测试添加 wait_for_usage_status 辅助方法
- 轮询直到 usage 记录进入 completed/failed 终态
- 避免异步 usage runtime 先落 pending/streaming 导致测试抖动
|
2026-04-14 02:22:23 +08:00 |
|
AAEE86
|
23233a3243
|
fix(admin): 修复 Key 自动获取模型时 allowed_models 同步逻辑
- 关闭自动获取上游模型时清空 allowed_models
- 开启自动获取上游模型时立即拉取并覆盖 allowed_models
- 增加模型覆盖提示并补充相关回归测试
|
2026-04-14 02:21:46 +08:00 |
|
fawney19
|
1000b706be
|
fix(gateway): 收紧本地 usage 测试轮询条件
|
2026-04-14 01:55:13 +08:00 |
|
fawney19
|
53acfbabf6
|
refactor(gateway): 重构 ai pipeline 规划链路
|
2026-04-14 01:27:04 +08:00 |
|
RWDai
|
37bb120d20
|
feat(aether-proxy): 支持 Alpine 主机服务安装与 musl 发布 (#291)
* feat(aether-proxy): 支持 Alpine 主机服务安装与 musl 发布
* fix(aether-proxy): address alpine support review findings
v0.7.0-rc4
|
2026-04-13 17:20:22 +08:00 |
|
fawney19
|
4fd2b4a014
|
fix(gateway): 修复 balance 刷新去重键冲突、usage 状态回退与测试竞态
- balance_cache: 引入实例级 refresh key 防止多实例共享进程级 HashSet 冲突
- InMemoryUsageRepo: 阻止 pending/streaming 状态覆盖已终结(completed/failed/cancelled)记录
- usage 同步测试: 等待条件从 is_some() 改为检查 status=="completed" 避免竞态
- wallet 测试: 增加轮询等待 wallet 扣款完成
- 整理 import 语句与 tests 模块位置
|
2026-04-13 16:48:05 +08:00 |
|
fawney19
|
9a376e4223
|
refactor(admin): 将排行榜排序与排名函数移至 tests 模块之前
|
2026-04-13 16:13:18 +08:00 |
|
AAEE86
|
b2d85d70ca
|
refactor(runtime): 优化管理端摘要查询与维护聚合链路
- 为 provider catalog key 和 video task 列表增加 summary/page 查询与排序能力,减少列表场景读取重字段
- 将多处 SQL 结果读取改为流式收集,降低 `fetch_all` 的内存占用
- 把日/小时统计、钱包日用量等维护任务改为数据库侧 `CTE + upsert` 聚合
- 修复视频任务轮询更新时从本地 snapshot 回填稀疏字段,避免 `prompt` 和请求体信息丢失
|
2026-04-13 15:44:58 +08:00 |
|
fawney19
|
6aa16ec792
|
feat(data): 废弃 usage 表 HTTP/结算列,迁移至 settlement_snapshots 与 http_audits
- 新增迁移 20260413030000:标记 billing_status、finalized_at、request_headers 等列为 DEPRECATED
- 更新 baseline_v2.sql 同步废弃注释,BASELINE_V2_CUTOFF_VERSION 升至 20260413030000
- usage/sql.rs:inline body 阈值归零,强制所有 body 走 blob 存储;upsert 时清空 legacy header/output_price 列
- 查询层优先读 usage_settlement_snapshots 的 billing_status、finalized_at、output_price_per_1m
- runtime.rs:stale usage 处理同步写入 usage_settlement_snapshots;SELECT FOR UPDATE 改为 FOR UPDATE OF usage
- 前端:PerformanceAnalysis 页面重构为实时面板,新增 prometheus 工具函数与 monitoring API
|
2026-04-13 14:53:46 +08:00 |
|
fawney19
|
e46629d11a
|
fix(frontend): 统一 Usage 页面默认时间范围为 today
|
2026-04-13 14:14:07 +08:00 |
|
fawney19
|
5bb08e6aa4
|
feat(gateway): 重构 usage 数据层、迁移系统与系统导入
数据库迁移:
- 引入 baseline v2 bootstrap,空库首次启动自动初始化
- 服务启动不再自动执行迁移,需显式 `--migrate` 运行
- 新增 pending migration 检测,schema 落后时拒绝启动
Usage 数据层:
- usage body 存储外部化为独立 blob 表
- 新增 HTTP audit 表拆分存储请求/响应头与 body ref
- 后台清理任务支持 legacy body ref 元数据迁移
- usage runtime 写入迁移到专用 tokio runtime(独立线程池, 8MB 栈)
系统导入/导出:
- 支持用户、API Keys、钱包数据的完整导入
- 兼容 legacy 与 v1.3+ 两种导出格式
其他改进:
- executor outcome 增加 runtime miss 诊断上下文
- 主 tokio runtime 栈大小调整为 8MB
- 前端 provider 管理支持 base URL 配置
- dev.sh 支持 --migrate 参数
|
2026-04-13 14:01:22 +08:00 |
|
fawney19
|
3698e5a833
|
fix(test): 修复 MutexGuard 跨 await 点的 Clippy 警告
|
2026-04-12 16:22:29 +08:00 |
|
fawney19
|
f84febbf89
|
fix(proxy): 修复 Clippy dead_code 与 too_many_arguments 警告
|
2026-04-12 16:19:23 +08:00 |
|
fawney19
|
e029012f73
|
Merge pull request #289 from AAEE86/rust
fix(usage): 统一使用记录与仪表盘的缓存命中率计算口径
|
2026-04-12 16:12:22 +08:00 |
|