fawney19
|
11c5884d4f
|
Remove API format rate multiplier field
|
2026-05-03 00:55:59 +08:00 |
|
fawney19
|
e3ea2d1451
|
feat: configure auth channel mismatch formats
|
2026-05-03 00:49:22 +08:00 |
|
fawney19
|
47ee8b9c13
|
refactor: fold ai surfaces into formats
|
2026-05-02 18:19:39 +08:00 |
|
fawney19
|
4fc7cecf30
|
Fix OAuth token import and table filters
|
2026-05-01 02:14:49 +08:00 |
|
fawney19
|
33aa70c22b
|
fix scheduler affinity candidate selection
|
2026-04-30 16:27:24 +08:00 |
|
fawney19
|
fa47e8a3c0
|
feat: add select all to access limit dropdowns
|
2026-04-30 00:45:53 +08:00 |
|
Entropy.Xu
|
4d59d518d1
|
fix: correct API key expiry and dashboard savings (#361)
|
2026-04-30 00:35:32 +08:00 |
|
fawney19
|
d6de917878
|
Fix key API format auth help
|
2026-04-29 17:35:16 +08:00 |
|
fawney19
|
e751289dfb
|
Support per-format provider key auth
|
2026-04-29 15:46:50 +08:00 |
|
fawney19
|
07a319259b
|
Normalize canonical API formats
|
2026-04-29 10:20:41 +08:00 |
|
fawney19
|
02ad67fe33
|
fix(test): update openai format identifier from cli to responses
|
2026-04-28 21:04:38 +08:00 |
|
fawney19
|
3d20c05ef7
|
Fix OAuth refresh through tunnel proxy
|
2026-04-28 19:45:34 +08:00 |
|
fawney19
|
a7a3c9f023
|
Fix OAuth import proxy handling
|
2026-04-27 20:05:43 +08:00 |
|
fawney19
|
17f09fc8c1
|
Expose ranking metadata in request trace
|
2026-04-27 17:24:32 +08:00 |
|
fawney19
|
3b542434a2
|
Unify candidate ranking pipeline
|
2026-04-27 17:24:31 +08:00 |
|
fawney19
|
5cd2244bc2
|
fix frontend openai responses alias display
|
2026-04-26 23:59:53 +08:00 |
|
fawney19
|
0ec4b4c8a4
|
guard legacy openai alias compatibility
|
2026-04-26 23:59:53 +08:00 |
|
fawney19
|
4ec591fbf2
|
centralize openai responses alias handling
|
2026-04-26 23:59:53 +08:00 |
|
fawney19
|
5b914aa78c
|
migrate ai format conversion to responses adapters
|
2026-04-26 23:59:53 +08:00 |
|
fawney19
|
baa0ddd787
|
Improve runtime miss usage diagnostics
|
2026-04-26 01:44:54 +08:00 |
|
fawney19
|
1d3ea3232d
|
Add unified candidate failure diagnostics
|
2026-04-26 01:38:37 +08:00 |
|
fawney19
|
429fdb47e6
|
fix(usage): 简化本地执行错误提示
|
2026-04-25 20:46:22 +08:00 |
|
fawney19
|
00744c0ce5
|
feat(observability): 引入错误链路 error_flow 元数据并区分上游/客户端错误
- 网关在本地 failover 时构建 error_flow 元数据(分类/决策/传播策略),写入 report_context
- scheduler-core 解析并透传 error_flow 至候选 extra_data
- admin usage 详情拆分 request/upstream/client/failure_summary 错误域,敏感上游错误标记为 suppressed
- 前端 RequestDetailDrawer 拆出"返回客户端"与"上游响应"双错误卡片
- HorizontalRequestTimeline 节点详情展示真实请求错误及 error_flow 标签
|
2026-04-25 17:01:07 +08:00 |
|
RWDai
|
b8205b5a09
|
Fix/usage json entity escaping (#333)
* fix(usage): 修复 JSON 视图实体转义显示
* fix(usage): 解码 OpenAI 工具参数实体
|
2026-04-25 16:41:25 +08:00 |
|
fawney19
|
cef7dcac71
|
refactor(usage): 抽取 JsonContentPanel 通用 JSON 展示组件
请求详情抽屉与时间线统一复用工具栏(展开/收缩、复制)和 JSON 视图,时间线的额外信息也由 pre 改为可交互面板
|
2026-04-25 11:44:01 +08:00 |
|
fawney19
|
1761921670
|
fix(usage): 移动端缓存 token 拆分为读/写两列展示
cache_read 与 cache_creation 原本被合并为单值,现分别显示并补充测试
|
2026-04-25 09:53:32 +08:00 |
|
fawney19
|
2c6209277f
|
fix(usage): Claude 流式合并 message_start/delta usage,前端移动端缓存 token 合并展示
- Claude provider state 在 message_start 记录基础 usage,message_delta 合并 output_tokens
- 前端 UsageRecordsTable 移动端缓存列改为 cache_creation + cache_read 合计展示
|
2026-04-24 22:28:04 +08:00 |
|
fawney19
|
db1059e73b
|
fix(usage): 修复 Gemini total 重复累加 cache_read 并补充测试
- write.rs: Gemini usage 提取 total 时不再叠加 cachedContentTokenCount
- 补充 Claude 大 cache_read 场景下 input_tokens 不被扣减的测试
- 补充前端 getEffectiveInputTokens 对 Claude 格式不减 cache_read 的测试
|
2026-04-24 21:20:45 +08:00 |
|
fawney19
|
e265475c17
|
fix(usage): 修正 input_tokens 统计与显示
- SQL 查询不再用 settlement snapshot 的 billing_input_tokens 覆盖原始 input_tokens
- usage_mapper 针对 OpenAI 格式在 input_tokens 缺失时从 total_tokens - output_tokens 推导
- 前端轮询合并优先采用最新 record 的 input_tokens / effective_input_tokens
|
2026-04-24 20:59:12 +08:00 |
|
fawney19
|
657fcd595c
|
refactor(rust): 拆分 usage sql 仓储为模块并外置 SQL 文件
- 将 usage/sql.rs 拆分为 sql/mod.rs 与 sql/tests.rs
- 将内联 SQL 抽离到 sql/queries/ 目录下的独立 .sql 文件
- 前端用量记录表格移除缓存创建 token 展示,保留 cache read 列
|
2026-04-24 20:22:24 +08:00 |
|
fawney19
|
e0c928fbe8
|
feat(auth): /me 接口返回 has_password 字段,前端 Profile 类型同步调整
|
2026-04-24 14:52:49 +08:00 |
|
fawney19
|
f3c9835759
|
feat(pool): 引入 pro_first 调度预设、Pool 候选持久化跳过与诊断信息优化
- 新增 pro_first 调度预设(Pro 优先),更新 plus_first 仅针对 Plus 计划,移除 free_team_first
- Pool 内部候选(pool_key_index 不为空)跳过 DB 持久化(available/skipped/unused 均适用)
- LRU 排序新增 catalog_lru_score 回退:runtime 无记录时使用 last_used_at_unix_secs
- 执行路径 miss 诊断消息细化为中文,按 reason 分类输出可读说明
- build_local_request_candidate_status_record 补充 extra_data 和 created_at_unix_ms 字段
- OpenAI CLI 计划构建流程补充候选评估进度跟踪与 terminal reason 设置
- 前端 PoolSchedulingDialog 增加 pro_first 预设展示,修复 LRU 默认预设检测逻辑
|
2026-04-24 13:29:05 +08:00 |
|
fawney19
|
5d710d9d10
|
feat(rust): 支持 image 同步转流式 SSE、free_team_first 调度预设及账户错误自动重试
- openai:image 同步响应桥接为流式 SSE(image_generation.completed / image_edit.completed 事件)
- image 请求解析与前置校验移除模型白名单,支持任意自定义模型名
- 调度器新增 free_team_first 预设(mode: both / free_only / team_only)
- pool config 解析重构:新增 POOL_ALLOWED_SCHEDULING_PRESETS 白名单,规范化 mode 字段
- 错误分类器新增账户/账单错误模式集,升级为 RetryUpstreamFailure 而非 StopSemanticClientError
- 修复 stream execution 中上游 headers 与输出 headers 混用导致 content-type 判断错误的问题
- codex image 工具始终写入 action 字段(generate/edit),仅 generate 操作填充默认 size/quality
- 前端:pool 节点组只展示实际执行过的候选节点,全部 skipped 时折叠为最后一个节点
- Redis 测试就绪检测从 TCP 连接改为 PING/PONG 协议验证
|
2026-04-24 10:07:24 +08:00 |
|
AAEE86
|
a9d10163af
|
fix(oauth): 修复 OAuth 刷新后 Token 有效期不更新问题 (#324)
- 持久化刷新后的 `expires_at` 到 Provider Key SQL 更新链路
- 手动刷新接口优先返回本次刷新得到的过期时间
- 按当前 Key 字段重建 OAuth 状态快照,避免旧快照覆盖
- 前端刷新后防止旧列表数据回退覆盖新有效期
|
2026-04-24 09:35:25 +08:00 |
|
fawney19
|
5148370253
|
fix(usage): 修复含失败信号的 pending 请求被误判为活跃的问题
- pending/streaming 状态含 status_code >= 400 或 error_message 时视为 failed
- 候选状态派生改为 failed 优先于 stale pending/streaming
- 活跃请求轮询时保留失败信号字段的更新
- 图片流支持 partial_image 事件转发及从 response.completed 读取最终图片
|
2026-04-24 03:07:11 +08:00 |
|
Entropy.Xu
|
0f94f92c37
|
fix(provider): 将rust分支的gemini cli端点行为对齐到python分支 (#321)
* fix(provider): 对齐 Vertex/Gemini 上游发包与 Python master
- provider-transport: 为 custom+aiplatform 推断 Vertex API key 上下文并统一 URL 构建顺序,复用共享 request_url 构建最终上游地址
- ai-pipeline/gateway: Vertex Gemini 路径改为仅使用 URL query key,不再向上游附带 x-goog-api-key header;同步对齐 standard/admin/test-connection/runtime miss 摘要中的最终 URL
- gemini conversion: 按 Python master 输出 Gemini 请求体,补齐 system_instruction / generation_config / tool_config / function_declarations 形态,并移植 Gemini schema 清洗逻辑
- scheduler/executor: 将最终 upstream_url、mapped_model、key_name 写入候选 extra_data,运行时 miss 诊断优先展示真实展开后的上游 URL 便于服务器排障
* fix(provider): 修复 Vertex provider 测试与本地调度链路
* fix(provider): 对齐 Vertex 本地执行与 Rust CI
|
2026-04-23 23:01:06 +08:00 |
|
fawney19
|
bb312ff0cf
|
chore(tsconfig): 移除冗余的 baseUrl 配置
|
2026-04-23 22:05:02 +08:00 |
|
fawney19
|
342d4a268c
|
feat(stream-bridge): 支持上游 sync 响应转 SSE 流式输出,记录 client/upstream 流模式差异
- 新增 sync_to_stream 桥接模块,将非 SSE 上游响应转换为 SSE 格式回传给流式客户端
- stream_pump 检测非 SSE 响应头后缓冲整包并通过桥接逻辑重写为 SSE 帧
- proxy handler 同步支持 sync→stream 聚合与转换(覆盖 openai/claude/gemini 四种格式)
- sync_products 补全 openai:cli 的完整流式事件聚合(text delta、reasoning、tool call 等)
- usage runtime 写入 client_requested_stream / upstream_is_stream 到 request_metadata
- SQL 查询层将两个布尔字段从 request_metadata jsonb 中提取并回传给前端
- 前端 status.ts 新增 resolveUsageStreamLabelSegments,优先读取 client_requested_stream
- RequestDetailDrawer 在流式转换场景下显示"客户端→上游"两段 Badge
|
2026-04-23 21:53:50 +08:00 |
|
fawney19
|
fa328e18a1
|
feat: provider api_formats 可空继承、OpenAI 图片 edit/variation 与用量配额多项补强
- 鉴权: provider_api_keys.api_formats 改为可空,OAuth 托管 key 自动继承 provider endpoints 激活格式,相关 handler/测试同步更新
- 图片 planner: OpenAI 图片路由新增 edit/variation 操作并完善参数校验、响应合并与流式处理
- 用量: user me usage 返回区分 client_requested_stream/upstream_is_stream,前端 usage 列表筛选与展示增强
- 统计: stats_daily_model 新增 cache_creation_ephemeral_5m/1h tokens 字段与回填链路
- 配额/observability: quota repository 新增内存与 SQL 扩展,admin observability usage 字段扩充
- 其它: OAuth 导入/轮询收敛、provider 汇总与 pool admin 读写链路小修、新增 system_config 缓存与 provider template handler
Closes #318
Co-authored-by: Entropy.Xu <53283266+Entropy-Xu@users.noreply.github.com>
|
2026-04-23 14:42:51 +08:00 |
|
Entropy.Xu
|
f55f22d2e8
|
feat(codex-image): 封装 GPT Image 2 图片接口并收紧错误处理
- 新增 openai:image 路由、planner 与 finalize,内部通过 Codex responses image_generation tool 执行生图
- 补充 Codex OAuth/header 兼容、图片 success report 本地处理与相关前后端/集成测试
- 禁止 chat/completions 使用 gpt-image-2,图片接口限制 n=1,并移除 Provider 模型页的图片能力开关
|
2026-04-22 22:46:28 +08:00 |
|
fawney19
|
cf6228f525
|
feat(stats,rules): api_key 用量统计(total_tokens 字段 + 回填)与 body rules 新增 append/insert/regex_replace/name_style 操作
- 新增迁移 20260422120000_add_api_key_usage_stats.sql,为 api_keys 表添加 total_tokens 列
- 新增回填 20260422120000_backfill_api_key_usage_stats.sql,按历史 usage 重建 api_key 维度汇总
- 在 UsageWriteRepository trait 中添加 rebuild_api_key_usage_stats,补齐 SQL/内存实现及上层调用链
- 内存实现中新增 apply_usage_stats_delta,支持增量更新 api_key 统计快照
- dev.sh:改进临时日志目录管理,并在网关异常退出时输出错误提示
- frontend EndpointFormDialog:将 append 操作从 insert 分支拆分,提供独立 path/value 输入 UI
- rules.rs:扩展 body rules 支持,新增 append/insert/regex_replace/name_style 操作及 WildcardSlice 路径段
|
2026-04-22 20:16:57 +08:00 |
|
fawney19
|
063ef02306
|
fix(oauth): 系统导入时清理失效标记并强制刷新 refresh_token,前端徽章优先使用 account_id
- 后端 admin 系统导入 OAuth 凭据时重置 expires_at 与失效标记,并在存在 refresh_token 时触发一次本地刷新
- 前端 OAuth 徽章改为优先展示 account_id,采用去前缀后 5 字符的紧凑格式
|
2026-04-21 18:06:39 +08:00 |
|
fawney19
|
25a2b417be
|
refactor: 优化调度候选排序与用量写入链路并改进 Fernet 缓存与前端批量列表
|
2026-04-21 16:19:07 +08:00 |
|
fawney19
|
c5c56ff92f
|
feat(oauth): 允许替换已失效的活跃 OAuth 账号并同步 status_snapshot
- 活跃但 token 已过期或刷新失败的重复账号视为可替换
- 清除失效标记、刷新配额时同步更新 status_snapshot.oauth
- oauth_invalid 清除接口同时识别 invalid_at 与 invalid_reason 两种标记
- 批量导入任务状态区分 created_count / replaced_count,前端据此展示新增/替换统计
- 补充重复替换场景的集成测试,用量测试等待超时从 10s 提升到 30s 以适应并行压力
|
2026-04-20 22:59:02 +08:00 |
|
fawney19
|
226a6e58d5
|
refactor(gateway): 重构格式转换候选资格检查并优化测试基础设施
- 将 format_conversion_disabled 的过滤提前到候选遴选阶段,替代原来的 skip_reason 标记机制
- 为测试添加 execution_runtime_sync_override 直接注入支持,避免启动额外 HTTP 服务器
- 将 submit_terminal_event 改为 async record_terminal_event 确保失败用量事件可靠入库
- 新增 test_support 模块封装可重试的 loopback 端口绑定逻辑
- 前端:poolTrace 将 skipped 从隐藏状态移除,新增 buildPoolParticipatedCandidates 统一新旧链路逻辑,并将 skipped 状态色改为 foreground
|
2026-04-20 16:59:18 +08:00 |
|
fawney19
|
87afe4898e
|
fix(frontend): 为配额自动刷新加入 5 分钟冷却并优化 OAuth org 徽章显示
- 新增 quotaAutoRefreshCooldown 工具,按 provider 维度限制后台自动刷新频率,手动触发(刷新 token、变更 key)通过 ignoreCooldown 绕过
- OAuth org 徽章去除 org- 前缀后再缩略,避免 org:org-xx 的重复前缀,并缩小字号高度以适配紧凑布局
|
2026-04-20 15:56:59 +08:00 |
|
fawney19
|
d100c934c0
|
fix(frontend): 优化 OAuth 身份徽章优先级并避免 Kiro 订阅标签重复
- getOAuthOrgBadge 优先展示 organization id, 其次回落到 account_id 或 account_user_id, 不再使用 account_name 作为徽章文案
- Kiro provider 的订阅标签仅在与 OAuth plan 标签不一致时显示, 避免重复徽章
- 补充 getOAuthOrgBadge 的单元测试覆盖组织优先与回落场景
|
2026-04-20 15:00:17 +08:00 |
|
fawney19
|
9b48a008dc
|
fix(frontend): 合并 OAuth 状态展示并移除 Codex 积分信息
- providerKeyStatus: 合并 snapshot 与 legacy OAuth 状态,按严重程度取优并补全失效原因
- ProviderDetailDrawer: 移除 Codex 积分摘要与相关字段显示
|
2026-04-20 14:27:48 +08:00 |
|
fawney19
|
c2b7b6c231
|
refactor(proxy-nodes): 移除节点列表的 rollout 升级标签展示
|
2026-04-20 00:31:30 +08:00 |
|
fawney19
|
c1b9d94c84
|
feat(adaptive): 完善自适应 RPM 学习并将 Pool 调度状态与健康分解耦
- orchestration 新增 AdaptiveSuccess 效果,在成功回报路径上根据利用率窗口扩张 learned_rpm_limit
- 429 路径改用 429_observation/adjustment 记录以及基于历史的置信度评估,新增 last_rpm_peak 边界字段
- Pool 调度状态不再因 health_score 低或熔断而降级/拦截,前端同步移除相关按钮与文案兜底
- 新增前端 poolTrace 工具(附测试)承接原 HorizontalRequestTimeline 内的候选合并逻辑
|
2026-04-20 00:27:48 +08:00 |
|