fawney19
|
a9b24c9161
|
fix: Codex 刷新限额功能优化
- 修复并发协程中直接操作 SQLAlchemy Session 的问题,改为收集后统一更新
- 抽取硬编码模型名为 CODEX_QUOTA_REFRESH_MODEL 常量
- 前端刷新限额前添加确认对话框,提示会产生 API 调用费用
- 修正 loguru 日志格式为 {} 占位符风格
|
2026-02-05 18:09:40 +08:00 |
|
AAEE86
|
93090e227f
|
feat: Codex 提供商批量刷新限额功能 (#147)
- 后端 (keys.py):新增 POST /providers/{provider_id}/refresh-quota API,向 Codex 提供商的所有活跃 Key 发送测试请求,从响应头解析限额信息并更新数据库
- 前端 (ProviderDetailDrawer.vue):在 Codex 类型提供商的密钥管理区域添加"刷新限额"按钮,带加载动画和结果提示
- 前端 API (keys.ts):新增 refreshProviderQuota 接口调用及 RefreshQuotaResult 类型定义
- 其他:description 字段允许 null,公开 ensure_collectors_registered 函数
|
2026-02-05 18:09:14 +08:00 |
|
fawney19
|
5b9ba06af6
|
feat: base image hash 改用依赖指纹,上游流式策略改为三态按钮
CI 和 deploy.sh 的 base image hash 计算从整文件 cat 改为
tomllib 提取 pyproject.toml 依赖指纹,避免仅改注释或工具配置
触发不必要的 base 重建;前端将上游流式策略从 Select 下拉改为
头部三态循环按钮(跟随请求/固定流式/固定非流),点击即保存。
|
2026-02-05 17:20:34 +08:00 |
|
fawney19
|
8ad53b9490
|
fix: 修复配置导入时 api_formats 与 endpoint 格式比较不一致的 bug
原代码使用 .upper() 转大写与小写的 endpoint_formats 比较,
导致所有格式都被误判为"未配置对应 Endpoint"。
改为统一使用 normalize_signature_key 归一化后比较。
|
2026-02-05 16:51:52 +08:00 |
|
fawney19
|
b35ddcba3f
|
feat: 限制新建提供商类型为自定义和 Codex
新建模式下只显示自定义和 Codex 两个选项,编辑模式保留所有类型以兼容已有数据
v0.5.2
|
2026-02-05 16:34:28 +08:00 |
|
fawney19
|
5be7813ab8
|
refactor: 将访问令牌功能迁移至模块系统
- 新增 management_tokens 模块定义,支持通过环境变量控制可用性
- 从静态路由中移除 management-tokens,改由模块动态注册
- 前端路由添加模块激活检查,未激活时重定向到仪表盘
- 认证服务添加模块激活检查,未激活时禁止令牌认证
- 导航菜单中移除访问令牌入口(保留直接 URL 访问)
- 修复 alembic 迁移脚本格式和错误处理
|
2026-02-05 16:32:27 +08:00 |
|
fawney19
|
440721368f
|
feat: Antigravity 和 Codex 服务支持
- 新增 Antigravity 服务:签名缓存、URL 可用性检测、信封处理
- 新增 Codex 服务:信封处理、元数据收集器
- 重构 provider transport 支持新的服务架构
- 新增 stream_bridge 和 upstream_stream_bridge 处理流式响应
- 优化 OAuth 工具函数
- 添加相关测试用例
|
2026-02-05 15:59:41 +08:00 |
|
fawney19
|
ed2ff5c1d7
|
feat: 性能监控基础设施、解密缓存及计费简化
- 新增 PerfRecorder 性能记录工具,支持采样率与慢请求日志
- 在请求管道中埋点:auth、body_read、json_parse、context_build、authorize、handle
- 流处理器增加 parse/conversion 耗时追踪与 perf_metrics 落库
- 解密服务添加 LRU 缓存,降低高频解密 CPU 开销
- 格式转换分层开关设计:全局 OFF 时回退到端点配置,而非一刀切拒绝
- 移除 shadow billing 模块,统一使用新计费引擎
- 新增 Codex 网关请求适配器(store=false、role 映射、include 补齐)
- endpoint 创建接口支持 body_rules 参数
|
2026-02-05 14:22:11 +08:00 |
|
fawney19
|
e72e5370c4
|
refactor: 提取 is_codex_url 到公共 utils 模块
将重复的 Codex URL 判断逻辑提取到 src/utils/url_utils.py,
避免 transport.py 和 adapter.py 中的代码重复。
|
2026-02-05 11:17:00 +08:00 |
|
fawney19
|
bb125a1ddc
|
Merge pull request #146 from AAEE86/master
fix: Codex 端点 URL 使用 /responses 而非 /v1/responses
|
2026-02-05 11:15:08 +08:00 |
|
AAEE86
|
fecf48e180
|
fix: Codex 端点 URL 使用 /responses 而非 /v1/responses
Codex OAuth 端点(chatgpt.com/backend-api/codex)不走标准 /v1 前缀,之前 build_provider_url() 统一使用 /v1/responses 导致 404 错误。
修改内容:
- transport.py: build_provider_url() 对 Codex URL 做特判,使用 /responses
- EndpointFormDialog.vue: placeholder 对 Codex 端点显示正确路径
- guide-config.ts: 文档说明两种路径格式
|
2026-02-05 09:48:37 +08:00 |
|
fawney19
|
9c19a72d67
|
refactor: 移除 KeyFormDialog 中的 OAuth 认证逻辑
OAuth 流程已由独立的 OAuthAccountDialog 处理,移除 KeyFormDialog 中冗余的
OAuth 表单、授权流程 UI 和状态管理代码。同时清理 provider_oauth.ts 中不再
使用的接口和函数,修复 ProviderOAuthCompleteRequest 重复声明问题。
|
2026-02-05 02:56:33 +08:00 |
|
fawney19
|
d9d3a1afcf
|
feat: 提供商详情头部布局优化及行内描述编辑
- 重构详情抽屉头部:网站链接改为图标按钮,布局更紧凑
- 新增行内描述编辑功能,支持点击编辑、回车保存、Esc 取消
- 表单对话框移除描述字段,名称字段改为独占一行
- 修复次级限额重置时间的缩进问题
|
2026-02-05 02:23:41 +08:00 |
|
fawney19
|
34272af711
|
feat: 跨格式转换时按 ApiFamily 优先级排序端点
- 为 ApiFamily 枚举添加 priority 属性 (OpenAI=1, Claude=2, Gemini=3)
- 新增 _sort_endpoints_by_family_priority 函数按优先级排序端点
- 在调度器中对各分组内的端点应用优先级排序
- 修正测试文件的 type ignore 注解 (attr-defined -> method-assign)
- 新增 7 个端点排序相关的单元测试
|
2026-02-05 02:01:06 +08:00 |
|
fawney19
|
9a8f25d1a9
|
feat: OAuth Token 自动刷新调度、OAuth 对话框优化及 OpenAI CLI normalizer 重构
- 系统设置新增 OAuth Token 自动刷新任务开关,支持动态调度
- OAuth 授权对话框简化步骤布局,移除编号圆圈样式
- 重构 OpenAI CLI normalizer:将 if-else 链替换为事件处理器映射表,
将 stream_event_from_internal 拆分为独立方法
- 维护调度器在禁用刷新时移除已调度的 job
- .gitignore 新增 CLIProxyAPI/ 和 sub2api/ 排除项
- 补充 noop/unknown 事件处理器的测试覆盖
|
2026-02-05 01:07:47 +08:00 |
|
fawney19
|
ba4d88e8ce
|
Merge pull request #141 from AAEE86/dev
feat: 支持固定类型 Provider OAuth 授权
|
2026-02-05 00:08:58 +08:00 |
|
fawney19
|
73249f09e4
|
Merge remote-tracking branch 'origin/master' into dev
# Conflicts:
# src/api/handlers/base/request_builder.py
# src/api/handlers/openai_cli/adapter.py
# src/services/system/maintenance_scheduler.py
|
2026-02-05 00:07:29 +08:00 |
|
fawney19
|
4d6e7c094f
|
feat: OAuth 账户管理、维护调度、端点健康检查增强及前端优化
- 新增 OAuth 账户管理对话框和提供商详情抽屉中的 OAuth 信息展示
- 新增维护调度器(maintenance_scheduler)支持定时清理和健康检查
- 增强端点健康检查器,支持更多检测策略
- 重构 codex 服务为 metadata_collectors 模块
- 优化 OpenAI CLI normalizer 代码结构
- 前端: 改进使用量表格、统计图表、指南页面和异步任务管理
- 扩展多个数据库字符串列为 TEXT 类型
- 新增倒计时 composable 和 provider OAuth API 端点
|
2026-02-04 23:59:45 +08:00 |
|
fawney19
|
24c9105628
|
feat: 扩展多个字符串列为 TEXT 类型并添加 tls-client 可选依赖
数据库迁移:
- 扩展 provider_api_keys.api_key 为 TEXT(OAuth tokens 可能很长)
- 扩展 ldap_configs 的 bind_dn、base_dn、user_search_filter 为 TEXT
- 扩展 oauth_providers.client_id 为 TEXT
- 添加 SQLite 兼容支持(batch 模式)
- 添加表/列存在性检查
依赖:
- 添加 tls-client 作为可选依赖 [tls]
|
2026-02-04 16:45:05 +08:00 |
|
fawney19
|
c996078f30
|
refactor(frontend): 优化提供商表单布局和固定类型端点管理
- 提供商表单调整字段顺序:提供商类型放到名称前面,描述和主站链接放在同一行
- 简化固定类型提示文本
- 固定类型 Provider 端点管理中隐藏删除按钮
- 移除多余的锁定提示文本
|
2026-02-04 16:44:26 +08:00 |
|
AAEE86
|
4c1ec66365
|
feat: OAuth 密钥编辑时显示到期时间和重新授权按钮
- 后端 EndpointAPIKeyResponse 新增 oauth_expires_at 字段
- 从加密的 auth_config 中解密并提取 OAuth Token 到期时间
- 前端编辑已授权的 OAuth 密钥时显示"重新授权"按钮
- 在按钮旁显示 Token 到期时间
|
2026-02-04 16:05:25 +08:00 |
|
Yorha
|
26a0f99f8f
|
fix: 统一缓存token计费口径,避免OpenAI错误计费 (#144)
* fix: 统一缓存token计费口径,避免OpenAI错误计费
* fix: 添加 Gemini 缓存 token 归一化支持,优化代码结构
- Gemini 的 promptTokenCount 包含 cachedContentTokenCount,需要扣除
- 合并重复的 helper 函数为 _get_api_family()
- 将 import 移到文件顶部
- 补充 Gemini 测试用例
---------
Co-authored-by: fawney19 <elky0401@gmail.com>
|
2026-02-04 16:04:09 +08:00 |
|
fawney19
|
f64631a3a3
|
feat: 导入上游模型时自动匹配或创建 GlobalModel
- 导入模型时按名称精确匹配已有的 GlobalModel
- 如果没有匹配到则自动创建新的 GlobalModel
- 导入完成后清除 /v1/models 缓存使模型参与路由
|
2026-02-04 15:28:57 +08:00 |
|
AAEE86
|
cb4407ba49
|
feat: 新增 Codex 上游兼容整流器
- 强制 store=false
- 确保 instructions 字段存在(缺失/None -> "")
- 强制 parallel_tool_calls=true,并确保 include 包含 reasoning.encrypted_content
- 删除 Codex 会拒绝的一些字段:max_output_tokens/max_completion_tokens/max_tokens/temperature/top_p/service_tier
- 将 input[] 里 role=system 的 message 改成 developer
- 在发送上游请求前注入整流(覆盖“同格式透传”和“跨格式转换”两条链路)
|
2026-02-04 15:09:51 +08:00 |
|
fawney19
|
bf4e2d7a88
|
Merge pull request #143 from hemo94931/master
fix: 修复一些测试模型相关的bug
|
2026-02-04 14:09:31 +08:00 |
|
fawney19
|
065b1caaf9
|
feat: support more request statuses in timeline
|
2026-02-04 13:32:42 +08:00 |
|
fawney19
|
2516460a0d
|
fix: show cancelled requests in timeline
|
2026-02-04 13:26:33 +08:00 |
|
fawney19
|
d15b294c38
|
refactor: 重新设计定时任务 UI
- 使用模板化结构渲染定时任务列表,便于扩展
- 统一时间选择器样式:时钟图标 + 独立的时/分下拉框
- 优化卡片布局:开关、图标、标题、时间配置在同一行
- 未启用时图标无背景色,启用时显示主题色背景
- 额外配置项收纳在展开区域中
|
2026-02-04 13:14:11 +08:00 |
|
AAEE86
|
8c8a431428
|
feat: OAuth HTTP 请求添加重试机制和增强错误日志
- 新增 _redact_url 函数移除 URL 敏感参数
- 新增 _format_exc_chain 函数格式化异常链
- _httpx_post 对 ConnectError/TimeoutException 增加重试(最多 2 次)
- 增强日志输出:记录代理配置、主机、异常链等调试信息
|
2026-02-04 12:46:51 +08:00 |
|
hemo94931
|
44964916db
|
fix: align openai cli default path
|
2026-02-04 12:18:39 +08:00 |
|
hemo94931
|
a80ddea93c
|
fix: 修复测试规则保护头部解析
|
2026-02-04 12:18:39 +08:00 |
|
hemo94931
|
f1656c4960
|
fix: 测试模型中使用请求头和请求体规则修改请求
|
2026-02-04 12:18:39 +08:00 |
|
hemo94931
|
3b4ff95854
|
fix: OPENAI_CLI端点默认url修改
|
2026-02-04 12:18:39 +08:00 |
|
hemo94931
|
316d7055f5
|
fix: 修复测试模型时OPENAI_CLI请求包格式
|
2026-02-04 12:18:39 +08:00 |
|
fawney19
|
9ffe4b4ce8
|
Merge branch 'pr-140'
|
2026-02-04 12:17:46 +08:00 |
|
fawney19
|
3ffc6f21c4
|
refactor: 限制外部 API 仅接受 GlobalModel.name
移除调度器和模型映射器对映射名解析的支持,外部请求必须使用精确的
GlobalModel.name。同时新增 is_active 检查确保停用的模型被正确拒绝。
- 使用 get_global_model_by_name 替代 resolve_global_model_by_name_or_mapping
- 添加模型名称规范化(去除首尾空格)
- 统一检查 GlobalModel.is_active 状态
|
2026-02-04 11:49:47 +08:00 |
|
AAEE86
|
e4fdc65e52
|
feat: 支持固定类型 Provider OAuth 授权
- 新增 provider_type 字段区分自定义/预置 Provider 类型(claude_code/codex/gemini_cli/antigravity)
- 实现完整 OAuth 2.0 授权流程:start(生成授权 URL + PKCE)、complete(换取 token)、refresh
- 前端 KeyFormDialog 添加 OAuth 授权 UI,支持开始授权、粘贴回调 URL、完成授权、强制刷新
- 请求时自动检测 token 过期并刷新(120s 预留窗口 + Redis 分布式锁防并发)
- 固定类型 Provider 自动创建预置端点并锁定 base_url/custom_path
- 数据库迁移:添加 providers.provider_type,扩展 api_key 列为 TEXT
- 可选依赖 tls-client 用于 Claude token 请求的 TLS 指纹伪装
|
2026-02-04 10:24:25 +08:00 |
|
fawney19
|
f6dac1c38a
|
feat: 请求入口提前创建 pending Usage 记录
在 chat/CLI handler 的流式和非流式请求入口处提前创建 pending 状态的
Usage 记录,让前端可以立即看到"处理中"的请求,提升用户体验。
- 新增 BaseMessageHandler._create_pending_usage() 方法
- ChatHandlerBase 流式/非流式入口调用
- CliMessageHandlerBase 流式/非流式入口调用
- 使用 try-except 包裹,创建失败不影响主流程
v0.5.1
|
2026-02-04 03:27:58 +08:00 |
|
fawney19
|
7f09f191a1
|
feat: 优化用量状态同步机制和 OpenAI CLI 流式转换
- 增加状态回退保护,防止异步响应覆盖已知状态
- 添加轮询并发保护 (pollInFlight),避免重复请求
- 支持 cancelled 状态筛选和显示
- 前端 mergeRecordStatus 保护活跃记录状态
- 后端 streaming 状态同步更新改为使用当前 DB 会话
- OpenAI CLI 流式转换增加工具调用事件支持
- 轮询接口新增 target_model 字段返回
- 修复迁移脚本 inspector 缓存问题,改用 information_schema
|
2026-02-04 03:17:55 +08:00 |
|
fawney19
|
f3e2f84b38
|
feat: 统计数据优化 - 支持细粒度时间范围和多维度分析
- 新增 StatsHourly/StatsDaily 预聚合表,支持任意时区的精确统计
- 实现 UTC datetime 范围查询策略,边界数据实时聚合
- 新增统计 API:用户/API Key 维度、成本分析、性能百分位、错误分类
- 新增前端页面:成本分析、性能分析、用户统计
- 新增 TimeRangePicker 组件和统计可视化组件
- 优化 Dashboard 和 Usage 页面支持时间范围筛选
Close #135
|
2026-02-04 02:04:54 +08:00 |
|
YorhaL
|
5d94dcc94d
|
fix: 移除用户配额重置任务中的角色限制
|
2026-02-04 00:56:04 +08:00 |
|
YorhaL
|
381fc6b2cf
|
style: 统一定时任务布局
|
2026-02-04 00:38:02 +08:00 |
|
YorhaL
|
bac0e7fb20
|
feat: 添加用户配额自动重置功能及相关配置
|
2026-02-04 00:38:02 +08:00 |
|
fawney19
|
6f363a7703
|
perf: 优化流式响应内存占用和正则预编译
- 添加 record_parsed_chunks 标志,仅在 FULL 日志级别时累积 parsed_chunks
- 预编译 CJK 和敏感信息正则表达式,避免重复编译
- 优化 header 脱敏循环,预计算 lowercase 集合
- 移除 consumer_streams.py 中未使用的 message_fields 变量
- 将 SystemConfigService import 移至文件顶部
|
2026-02-03 21:32:53 +08:00 |
|
fawney19
|
d6597121f5
|
feat: Provider 签到任务时间可配置
- 前端添加签到时间选择器(HH:MM 格式)
- 后端支持动态更新调度器执行时间
- 新增 reschedule_cron_job 方法支持运行时重调度
|
2026-02-03 19:03:55 +08:00 |
|
fawney19
|
ddf3f5c107
|
feat: 添加请求体规则功能和 UI 优化
- 添加 body_rules 支持(set/drop/rename 操作)
- 后端 apply_body_rules 函数处理请求体修改
- 保护 model/stream 字段不被修改
- 前端 UI 重构:合并请求头/请求体规则为统一区域
- 使用左边框颜色区分规则类型(H=主题色,B=灰色)
Closes #139
Co-authored-by: CC <81609553+hemo94931@users.noreply.github.com>
|
2026-02-03 18:49:17 +08:00 |
|
fawney19
|
00442c41fa
|
feat: 视频计费增强与影子计费系统
|
2026-02-03 18:48:39 +08:00 |
|
fawney19
|
ed68aebfb0
|
refactor: 统一任务框架 Phase 3 - 用 TaskService/FailoverEngine 替代 FallbackOrchestrator
核心重构:
- 移除 FallbackOrchestrator,用 TaskService + FailoverEngine 替代
- TaskService 作为统一入口,支持 SYNC/ASYNC 两种任务模式
- FailoverEngine 实现候选遍历、重试、故障转移逻辑
- 新增 AttemptFunc/AttemptResult 协议,统一尝试结果表示
功能改进:
- 流式响应首字节探测(30s 超时,空流触发故障转移)
- 流式取消归因优化(区分客户端断连 vs 服务端中断)
- 新增 OpenAI Sora 视频取消路由 POST /v1/videos/{task_id}/cancel
- OpenAI 流式请求自动添加 stream_options.include_usage
代码规范:
- 修复 loguru 日志格式(%s → {})
- 新增 FORMAT_CONVERSION_ENABLED 环境变量说明
测试覆盖:
- test_failover_engine.py: FailoverEngine 单元测试
- test_task_service_async_execute.py: TaskService ASYNC 模式测试
- test_video_cancel_e2e.py: 视频取消端到端测试
|
2026-02-02 21:16:28 +08:00 |
|
fawney19
|
ebe1a8d3e3
|
fix: 修复测试文件兼容性问题
- 重命名 golden 测试数据文件,将 `:` 替换为 `_` 以兼容 Windows 文件系统
- 修复 test_compatibility.py 中的参数名 global_conversion_enabled -> effective_conversion_enabled
|
2026-02-02 10:37:28 +08:00 |
|
fawney19
|
26493ff0ab
|
refactor: 移除迁移脚本中自动创建 video endpoint 的逻辑
- 不再从 openai:chat/gemini:chat 自动复制创建 video endpoint
- 不再自动补齐 api_formats 中的 video 变体
- 不再复制 rate_multipliers/global_priority_by_format 到 video
v0.5.0
|
2026-02-02 09:16:57 +08:00 |
|