fawney19
|
f45fd06fb0
|
fix: 修复 Redis SCAN cursor 类型问题并优化缓存清除日志
- CacheService.delete_pattern 中 cursor 可能为 int 或 str,统一转为 int 比较
- 模型缓存清除时区分有/无缓存的日志级别(info/debug)
|
2026-01-23 16:23:17 +08:00 |
|
fawney19
|
6f597a5f54
|
fix: 修复模型权限正则匹配逻辑及相关缓存清除
- 修复 model_mappings 正则匹配不再受 candidate_models 限制
- Provider 启用/禁用/删除时清除 GlobalModel 解析缓存
- 优先级管理对话框中启用的 Provider 排在禁用的前面
- 修复请求时间线 skipped 状态颜色适配主题
|
2026-01-23 16:10:53 +08:00 |
|
fawney19
|
3963e424f8
|
Merge branch 'NyaDoo/master'
|
2026-01-23 14:44:47 +08:00 |
|
fawney19
|
86b9bc3036
|
feat: 模型列表 API 支持格式转换兼容性过滤
- 新增 get_compatible_provider_formats 函数,基于端点 format_acceptance_config 过滤兼容的 Provider
- 模型列表查询根据客户端格式和全局转换开关返回可用模型
- 缓存 key 增加 client_format 维度,避免不同格式的缓存混用
- GlobalModel 解析支持 provider_model_mappings 和 model_mappings 匹配
- 修复格式兼容性检查中 config 类型校验缺失问题
|
2026-01-23 14:33:42 +08:00 |
|
fawney19
|
08a3148ab3
|
refactor: 简化模型权限检查,移除 resolved_model_name 参数
- 从 check_model_allowed 和 check_model_allowed_with_mappings 移除 resolved_model_name 参数
- 优化匹配逻辑:先精确匹配 model_name,再检查 candidate_models 交集,最后进行映射匹配
- 更新 CacheAwareScheduler 中的相关调用,传入 provider_model_names 作为 candidate_models
- 同步更新测试用例
|
2026-01-23 00:57:47 +08:00 |
|
fawney19
|
7ef0488419
|
refactor: 完善拖拽排序逻辑并新增格式转换开关
- 修复 PriorityManagementDialog 中 provider 和 key 的拖拽排序逻辑
- 修复 ProviderDetailDrawer 中 key 的拖拽排序逻辑
- 被拖动项单独成组,其他同组项保持在一起
- 在系统设置中新增"启用格式自动转换"配置项
|
2026-01-23 00:07:07 +08:00 |
|
fawney19
|
1da70d0518
|
refactor: 统一测试请求构建逻辑,支持多格式测试
- 重构 adapter 基类的 build_request_body 方法,使用 converter_registry 自动处理格式转换
- 后端 test_model 接口增加 endpoint_id 和 api_format 参数支持
- 前端模型映射测试支持根据 Key 和端点配置动态显示可用格式下拉菜单
|
2026-01-22 23:25:51 +08:00 |
|
fawney19
|
6c7b40764f
|
refactor: 重构优先级拖拽排序逻辑,支持整组移动与归一化
- 将拖拽逻辑从简单的两项交换改为整组移动并重新归一化优先级值
- 修复对话框内容区域高度限制(min-h 改为 max-h)
- 优化 API 调用,只更新实际发生变化的 key
|
2026-01-22 20:54:19 +08:00 |
|
fawney19
|
69335ad974
|
refactor: 使用 DropdownMenu 组件重构模型测试按钮
- 新增 DropdownMenu 组件系列(DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem)
- 重构 ModelsTab 中的格式选择菜单,替换原有的手动实现
- 移除 handleClickOutside 等手动管理菜单状态的代码
|
2026-01-22 20:01:55 +08:00 |
|
fawney19
|
ee5ba42b79
|
feat: 增强 Gemini 认证支持与 URL 敏感信息脱敏
- 新增 extract_client_api_key_with_query 支持从 URL query 参数提取 API Key
- Gemini 格式遵循 Google SDK 行为:query 参数优先于 header
- 添加 redact_url_for_log 函数对日志中的敏感 URL 参数脱敏
- 上游请求始终使用 header 认证,清除 Gemini query 中的 key 参数
- 放宽 API Key 最小长度限制至 3 字符
- 完善认证方式相关代码注释
|
2026-01-22 19:11:38 +08:00 |
|
fawney19
|
1d27284575
|
Merge pull request #118 from AAEE86/fix2
fix: 链路预览只显示白名单匹配的 Endpoint 和 Key
|
2026-01-22 14:54:52 +08:00 |
|
fawney19
|
af1828dd32
|
feat: 新增 Thinking 整流器处理跨 Provider 签名错误 (#115)
当 Provider A 生成的 thinking 块被发送到 Provider B 时,签名验证会失败。
本次更新实现了自动整流机制,在遇到签名错误时自动清洗 thinking 块后重试。
主要更改:
- 新增 ThinkingRectifier 整流器,移除 thinking 块和 signature 字段
- 新增 ThinkingSignatureException 异常类型
- ErrorClassifier 新增 Thinking 错误模式检测
- FallbackOrchestrator 支持整流后在当前候选重试
- Handler 层传递 request_body_ref 容器支持请求体动态修改
- Usage API 新增 has_rectified 字段标识整流过的请求
- 新增 THINKING_RECTIFIER_ENABLED 配置项控制功能开关
其他改进:
- CacheAwareScheduler 支持 exact/convertible 候选分组排序
- StreamProcessor 预读阶段新增格式转换试验
- ProviderAPIKey.api_formats 改为可空(None 表示支持所有格式)
- Dockerfile 修复 entrypoint.sh 换行符问题
Closes #115
Co-Authored-By: FredericMN <FredericMN@users.noreply.github.com>
|
2026-01-22 14:23:33 +08:00 |
|
fawney19
|
cc5db20c58
|
feat: 实现跨 API 格式自动转换功能
- 新增端点级 format_acceptance_config 配置,控制是否接受跨格式请求
- 重构 EndpointFormDialog 为卡片式布局,支持内联编辑和格式转换开关
- StreamProcessor 实现流式响应的跨格式转换,支持 OpenAI/Claude/Gemini 互转
- CacheAwareScheduler 按端点格式筛选候选,同格式优先于跨格式
- 健康度/熔断按 Provider 端点格式分桶,而非客户端请求格式
- 新增 format_conversion_total 和 format_conversion_duration_seconds 指标
- 新增全局配置 format_conversion_enabled 控制总开关
- Input 组件新增 size="sm" 尺寸选项
|
2026-01-22 01:48:56 +08:00 |
|
fawney19
|
99388bfa33
|
refactor: 重构 API 格式相关代码到统一的 api_format 模块
- 新增 src/core/api_format/ 模块,整合所有 API 格式相关功能
- enums.py: APIFormat 枚举定义
- metadata.py: API 格式元数据注册
- headers.py: 请求头处理逻辑
- detection.py: API 格式检测
- conversion/: 格式转换器(Claude/OpenAI/Gemini 互转)
- 删除分散在各处的旧实现
- src/core/api_format_metadata.py
- src/core/headers.py
- src/api/handlers/*/converter.py
- src/api/handlers/base/format_converter_registry.py
- 更新所有引用路径,使用新的统一模块
- 新增 cli_handler_base 中的格式转换支持
|
2026-01-21 18:07:10 +08:00 |
|
 fawney19andAAEE86
|
856077a46c
|
feat(ui): 重构端点健康状态为进度条可视化
- 将端点标签改为网格布局的进度条样式
- 显示 API 格式缩写和健康分数百分比
- 优化端点提示区分禁用、无可用密钥和未配置密钥状态
- 优化优先级管理对话框布局以显示更多内容
- 后端添加 total_keys 字段支持密钥状态区分
Closes #113
Co-authored-by: AAEE86 <ppk0227@hotmail.com>
|
2026-01-21 01:10:35 +08:00 |
|
fawney19
|
4eeba69381
|
feat: 新增 cancelled 状态区分客户端主动断开连接
- 新增 cancelled 请求状态,与系统失败 (failed) 区分
- 客户端主动断开连接 (HTTP 499) 不计入失败率统计
- 前后端同步更新状态枚举、UI 样式和统计逻辑
|
2026-01-20 15:40:16 +08:00 |
|
fawney19
|
ffca11bc18
|
fix: 优化模型获取错误状态处理逻辑
只有在所有端点都失败时才记录错误,部分端点失败不影响整体状态
|
2026-01-20 11:11:21 +08:00 |
|
fawney19
|
8e7582d8b9
|
feat: 新增签到 Cookie 失效警告功能
- 签到认证失败时返回 cookie_expired 标记而非静默跳过
- 前端显示"签到 Cookie 已失效"警告提示
- 支持 auth_expired 状态,余额数据仍可正常显示
- 认证失败(auth_failed)时清除余额缓存以便重试
|
2026-01-20 02:44:22 +08:00 |
|
fawney19
|
c8b256ded1
|
refactor: 优化仪表盘权限和 UI 样式
- 普通用户仪表盘隐藏提供商统计相关信息
- 为普通用户新增每日使用趋势折线图
- 登录对话框 UI 样式优化(Logo 放大、圆角统一)
- 输入框组件样式微调
- 将项目名称从 "API Gateway" 改为 "AI Gateway"
|
2026-01-20 01:58:55 +08:00 |
|
fawney19
|
dd7cd68b51
|
fix: 修复 NewApiBalanceAction 中 Cookie 检测方式
将 Cookie 检测从 httpx client headers 检查改为 service 层注入的
_has_cookie 配置标志,解决 Cookie 在实际请求中存在但检测失败的问题
|
2026-01-20 01:36:45 +08:00 |
|
fawney19
|
24ef24558c
|
refactor: 优化端点管理表单和上游模型获取逻辑
- 端点表单布局优化,支持 provider website 作为默认 Base URL
- 模型路由始终显示 provider_model_name
- 无端点时显示添加按钮
- 上游模型获取只针对基础 API 格式,跳过 CLI 格式
|
2026-01-20 01:32:47 +08:00 |
|
fawney19
|
edf8c663f1
|
refactor: 重构供应商操作基类为抽象类并支持 New API Cookie 认证
主要更改:
- 重构 BalanceAction/CheckinAction 为抽象基类,子类实现具体查询逻辑
- 重构 ProviderArchitecture 认证相关方法为抽象方法
- New API 支持 Cookie 认证(与 api_key+user_id 二选一)
- 添加 NewApiBalanceAction,支持查询余额前自动签到
- 修复 session cookie gob 编码解析逻辑
- 前端认证表单支持 inline 布局、字段联动和 onFieldChange 回调
|
2026-01-20 00:55:52 +08:00 |
|
fawney19
|
c24f3d47f7
|
Merge branch 'feat/dashboard-provider-cost-stats'
|
2026-01-19 20:47:38 +08:00 |
|
fawney19
|
1874214927
|
fix: 供应商统计排除 unknown 及表格列宽响应式优化
- 从 Dashboard 供应商成本统计中排除 unknown 提供商
- 优化供应商管理表格列宽为百分比宽度配合最小宽度
Closes #110
Co-authored-by: RWDai <27391645+RWDai@users.noreply.github.com>
|
2026-01-19 20:47:00 +08:00 |
|
 fawney19andRWDai
|
c29d57622f
|
feat: 添加 Dashboard 供应商成本统计功能
- 新增 stats_daily_provider 表存储每日供应商统计数据
- 实现供应商维度的数据聚合服务
- Dashboard API 返回 provider_summary 供应商汇总数据
- 前端新增 DoughnutChart 环形图组件
- Dashboard 新增供应商成本分布可视化卡片
- 移除重复的请求次数/费用趋势折线图
Closes #110
Co-authored-by: RWDai <27391645+RWDai@users.noreply.github.com>
|
2026-01-19 20:23:55 +08:00 |
|
fawney19
|
c66ecd7517
|
fix: 使用 sortApiFormats 对上游模型 API 格式进行排序
|
2026-01-19 19:43:13 +08:00 |
|
fawney19
|
427f173b38
|
feat: OAuth 绑定安全增强及限流配置优化
- 新增一次性绑定令牌机制,避免在 URL 中暴露 access_token
- 绑定流程改为新标签页打开,完成后自动刷新状态
- 放宽认证相关接口的 IP 限流配置
- 登录添加 429 限流错误的友好提示
- OAuth 绑定列表添加 Provider 图标显示
Close #106
|
2026-01-19 19:34:31 +08:00 |
|
 fawney19andAAEE86
|
b53e3f14d6
|
feat: 将 CreateUserRequest 邮箱字段改为可选
Closes #107
Co-authored-by: AAEE86 <ppk0227@hotmail.com>
|
2026-01-19 18:38:02 +08:00 |
|
fawney19
|
ffdc9a9585
|
feat: 为 Provider 认证添加代理配置支持
- 前端新增可折叠的代理配置字段组(URL/用户名/密码)
- 更新 anyrouter/cubence/new-api/yescode 模板支持代理
- 后端 provider_ops 服务验证和数据获取时支持代理
- 移除 Dockerfile 中的 ca-certificates(回退之前改动)
|
2026-01-19 18:30:52 +08:00 |
|
fawney19
|
b6a9969aee
|
fix: 添加 ca-certificates 解决 Docker 容器内 SSL 证书验证失败
python:3.12-slim 镜像缺少系统级 CA 证书,导致 httpx 请求外部
HTTPS 服务时出现 CERTIFICATE_VERIFY_FAILED 错误。
|
2026-01-19 18:02:04 +08:00 |
|
fawney19
|
0265849ed3
|
feat: 统一 SSL 证书配置并支持用户创建时设置访问权限
- 新增 ssl_utils.py 模块,统一使用 certifi 证书
- 将所有 httpx 客户端的 verify 参数改为使用 get_ssl_context()
- 管理员创建用户时支持设置 allowed_providers/api_formats/models
- 修复 provider_ops 敏感字段列表缺失 session_cookie
|
2026-01-19 17:56:02 +08:00 |
|
fawney19
|
6bc9cdc69d
|
feat: 新增 Anyrouter/Cubence/YesCode 架构及余额监控增强
- 新增三个 provider 架构:Anyrouter、Cubence、YesCode
- 前端新增对应的认证配置模板
- 余额监控增强:支持窗口限额显示(进度条+倒计时)、签到状态、错误信息展示
- 架构基类新增 prepare_verify_config 异步预处理方法
- API 返回 ops_architecture_id 字段用于前端展示
|
2026-01-19 17:18:03 +08:00 |
|
fawney19
|
3d88dfd98a
|
feat: 添加 OAuth 认证支持及相关改进
- 新增 OAuth 模块,支持 LinuxDo/GitHub/Google 等第三方登录
- 用户邮箱改为可选字段,支持无邮箱注册
- 新增模块配置验证状态 (config_validated/config_error)
- 系统设置界面改为分块独立保存
- 用户设置新增 OAuth 绑定管理和首次密码设置
- 登录界面支持 OAuth 按钮展示
- 邮箱验证设置移至邮件设置页面
|
2026-01-19 03:19:17 +08:00 |
|
fawney19
|
e2e14fd09c
|
feat: ProviderOpsConfig 支持独立存储 base_url
将 base_url 作为 ProviderOpsConfig 的独立字段存储,
获取时优先读取配置中的值,否则回退到 endpoint/provider。
|
2026-01-18 13:20:14 +08:00 |
|
fawney19
|
aa57f78561
|
feat: 验证 API 成功后预填充余额缓存
验证认证成功时,复用返回的 quota 信息缓存余额,
避免后续重复查询余额接口。
|
2026-01-18 13:00:11 +08:00 |
|
fawney19
|
0f7ba38655
|
fix: 新增 API 验证增加响应完整性检查
- 站点地址字段在无官方地址时改为必填
- 验证成功时检查用户信息和余额是否完整返回
|
2026-01-18 11:40:59 +08:00 |
|
fawney19
|
1e71d355fc
|
fix: 自动同步模式下禁用上游模型手动选择
- 添加"自动同步"标签提示
- 禁用全选/取消按钮
- 禁用模型项点击交互
- 调整视觉样式降低模型项不透明度
|
2026-01-18 01:56:16 +08:00 |
|
fawney19
|
0c5c6b3288
|
refactor: 提取模型可用性查询到独立模块 ModelAvailabilityQuery
Close #101
- 新增 src/services/model/availability.py,集中管理系统级模型可用性查询条件
- 重构 models_service.py,复用 ModelAvailabilityQuery 的查询方法
- 删除 find_model_by_id 的 provider_model_name 回退逻辑
- 支持 model_mappings 正则匹配(使用 check_model_allowed_with_mappings)
- 修复 test_auth.py 中缺少的 is_locked mock 属性
- 新增 ModelAvailabilityQuery 单元测试
|
2026-01-18 01:45:25 +08:00 |
|
fawney19
|
b98fc8497f
|
feat: 自适应 RPM 未学习时不限制,改为碰壁学习策略
- 移除自适应模式的默认初始限制(RPMDefaults.INITIAL_LIMIT)
- 未学习到边界前不限制 RPM,让系统自由运行直到遇到 429
- 前端自适应 Key 显示学习到的值或"探测中"状态
- 批量余额查询改为并行执行,提升性能
|
2026-01-17 23:44:53 +08:00 |
|
 fawney19andAAEE86
|
f002f8de03
|
feat: Key 删除时自动解除不再匹配的 GlobalModel 关联
- 新增 auto_disassociate_provider_by_key_whitelist 方法检测并解除关联
- 删除 Key 后检查 Provider 剩余 Key 白名单,移除不再匹配的 Model
- 前端删除密钥后并行刷新端点列表、模型列表和模型映射
Closes #102
Co-authored-by: AAEE86 <ppk0227@hotmail.com>
|
2026-01-17 22:05:09 +08:00 |
|
 fawney19andAAEE86
|
4fa0201b7e
|
feat: 审计日志搜索从用户ID改为用户名模糊匹配
Closes #104
Co-authored-by: AAEE86 <ppk0227@hotmail.com>
|
2026-01-17 20:47:13 +08:00 |
|
 fawney19andAAEE86
|
8053cbd854
|
feat: 分页组件支持 pageSize 浏览器缓存
- 为 Pagination 组件添加 cacheKey 属性,支持将 pageSize 缓存到 localStorage
- 组件挂载时自动恢复缓存的 pageSize 设置
- 为各页面的分页组件配置独立的缓存键
- 仅在显示 pageSize 选择器时启用缓存恢复
Closes #105
Co-Authored-By: AAEE86 <33052466+AAEE86@users.noreply.github.com>
|
2026-01-17 20:21:03 +08:00 |
|
fawney19
|
c71027c466
|
feat: 添加 Provider Ops 扩展操作系统,支持余额监控
主要更改:
- 新增 Provider Ops 服务框架,支持通过架构配置执行余额查询等扩展操作
- 后端:添加 provider_ops 服务层和 API 路由
- 前端:添加 ProviderAuthDialog 组件配置认证信息
- 前端:添加 providerOps API 和认证模板系统
UI/组件优化:
- Input 组件:新增 masked 属性,使用 CSS 遮蔽敏感信息,避免触发密码管理器
- Pagination 组件:移除首页/末页/上下页按钮,改为页码跳转输入框
- KeyFormDialog:使用 masked 属性简化 API Key 输入逻辑
- ProviderManagement:重新设计表格布局,显示余额监控数据
|
2026-01-17 19:50:35 +08:00 |
|
fawney19
|
3cdf471473
|
fix: 修复端点 header_rules 无法清空的问题
- updateEndpoint 接口的 header_rules 类型改为支持 null
- rulesToHeaderRules 返回 null 而非 undefined 以正确清除规则
- 将 header 规则操作类型文案"设置"改为"覆写"
|
2026-01-16 20:06:20 +08:00 |
|
fawney19
|
b807c16395
|
fix: 修复对话轮次分组器的类型安全问题
- 移除 grouper.ts 中的 as any 类型断言,使用正确的类型守卫
- 导入具体的 RenderBlock 类型替代 import() 语法
- 合并 ConversationView.vue 中的两个 watch 避免竞争条件
- 使用 lastRenderResultId 追踪变化防止重复初始化
|
2026-01-16 19:53:54 +08:00 |
|
fawney19
|
aa59862a70
|
Merge branch 'NyaDoo/master'
|
2026-01-16 19:47:45 +08:00 |
|
fawney19
|
45f071abd9
|
fix: 在 Provider/Endpoint/Key 变更时清除 /v1/models 列表缓存
- 将 on_key_allowed_models_changed 改为 async 函数
- 在 Provider/Endpoint/Key 的增删改操作后调用 invalidate_models_list_cache
- 优化 invalidate_models_list_cache 使用 delete_pattern 通配符删除
|
2026-01-16 19:42:35 +08:00 |
|
fawney19
|
019e148ddb
|
refactor: 将上游模型缓存从前端迁移到后端 Redis
- 后端:定时任务刷新时将上游模型写入 Redis 缓存
- 后端:provider_query 优先从缓存读取,支持 force_refresh 参数
- 后端:auto_fetch_models 开启时改为同步获取,确保前端能立即看到数据
- 前端:移除本地缓存,只保留并发请求去重逻辑
- 前端:KeyAllowedModelsEditDialog 添加刷新上游模型按钮
|
2026-01-16 19:10:59 +08:00 |
|
fawney19
|
b2d08f964d
|
feat: 删除端点时自动清理关联密钥的 API 格式配置
- 端点删除添加确认弹窗,提示用户关联密钥将受影响
- 密钥表单添加 canSave 验证,禁用按钮替代弹窗提示
- 后端删除端点时自动从关联密钥移除对应 API 格式
|
2026-01-16 18:24:52 +08:00 |
|
fawney19
|
d5d74339dd
|
refactor: 将 global_priority 和 rate_multiplier 改为按 API 格式配置
- 新增 global_priority_by_format 字段,支持按 API 格式设置全局优先级
- 移除已废弃的 rate_multiplier 字段,统一使用 rate_multipliers
- 移除已废弃的 timeout 字段(providers 和 provider_endpoints 表)
- 更新调度器以支持按格式的优先级排序
- 同步更新前后端类型定义和 API 接口
- 添加数据库迁移脚本,自动迁移现有数据
|
2026-01-16 17:53:27 +08:00 |
|
fawney19
|
6c98816f9f
|
feat: 实现功能模块系统,支持模块的动态注册与启用控制
- 新增 ModuleRegistry 核心,支持模块注册、可用性检查和启用状态管理
- 新增模块管理 API(管理端和公共端),提供模块状态查询和启用控制
- 将 LDAP 功能迁移到模块系统,支持通过环境变量和数据库配置控制
- 前端新增模块管理页面和 store,支持模块启用/禁用操作
- 路由守卫集成模块状态检查,未激活模块的页面自动重定向
- 面包屑导航支持模块配置页面的层级显示
- Switch 组件新增 disabled 属性支持
|
2026-01-16 16:14:12 +08:00 |
|
fawney19
|
50343d5459
|
refactor: 移除 Provider/Endpoint 级别的 timeout 配置,改用全局环境变量
- 废弃 Provider.timeout 和 ProviderEndpoint.timeout 字段(保留数据库列以兼容)
- 非流式请求超时由 HTTP_REQUEST_TIMEOUT 环境变量控制(默认 300 秒)
- 流式请求首字节超时由 STREAM_FIRST_BYTE_TIMEOUT 环境变量控制(默认 30 秒)
- 移除前端表单中的超时配置输入框
- 简化 settings.py 中的 TTFB 超时解析逻辑
- 更新 API 请求/响应模型,移除 timeout 字段
- 更新导入导出功能,不再包含 timeout 配置
|
2026-01-16 13:08:39 +08:00 |
|
fawney19
|
e6a31a61db
|
fix: 增强嵌入式错误的状态码提取与处理
- ParsedResponse 新增 embedded_status_code 字段存储嵌套状态码
- 新增 _extract_embedded_status_code 函数支持从多种格式提取状态码
- 非流式响应增加嵌套错误检测逻辑
- 统一使用 embedded_status_code 替代从 error_type 解析数字的方式
- fallback_orchestrator 使用嵌入式状态码进行错误记录
|
2026-01-16 11:01:05 +08:00 |
|
fawney19
|
adc82532eb
|
refactor: 将对话解析器拆分为独立模块
将 lib/conversationParser 重构为 conversation/ 目录:
- 按 API 格式拆分解析器 (claude.ts, openai.ts, gemini.ts)
- 提取公共渲染逻辑到 render.ts
- 添加解析器注册表支持自动格式检测
- 更新组件导入路径
|
2026-01-16 03:11:41 +08:00 |
|
fawney19
|
02770d56df
|
refactor: 重构请求详情对话视图的渲染架构
- 新增 BlockRenderer 组件,支持递归渲染多种内容块类型
- 将 ConversationView 改为使用 RenderResult 和 BlockRenderer
- 删除旧的 messageExtractor 工具,改用 conversationParser 库
- 更新 RequestDetailDrawer 中的对话解析和复制逻辑
|
2026-01-16 02:53:47 +08:00 |
|
fawney19
|
1366c0b973
|
fix: 优化请求详情抽屉在窄屏的响应式布局
- 窄屏时抽屉占满全宽,宽屏时保持 800px
- 减小窄屏时的内边距 (px-3/py-3 vs px-6/py-4)
- 阶梯定价标题行在窄屏时改为垂直布局
- Tab 按钮内边距响应式调整,工具栏不被压缩
|
2026-01-16 01:53:59 +08:00 |
|
fawney19
|
8bd3a894f1
|
fix: 修复请求链路追踪宽度不足时节点被遮挡的问题
使用 justify-content: safe center 替代 center,
当内容溢出时自动回退到靠左对齐,确保左侧节点可滚动访问
|
2026-01-16 01:43:52 +08:00 |
|
fawney19
|
6cc66e404b
|
fix: 将请求详情抽屉的请求头默认数据源改为提供商
|
2026-01-16 01:38:59 +08:00 |
|
fawney19
|
b1cf348abb
|
fix: 修复迁移脚本对非对象类型 headers 的处理
在 headers -> header_rules 迁移时,添加 jsonb_typeof 类型检查,
避免 jsonb_each_text 在非对象类型数据上报错。
|
2026-01-16 01:26:45 +08:00 |
|
fawney19
|
8e11f3864a
|
feat: 添加 API Key 锁定功能和请求头规则系统
1. API Key 锁定功能
- 管理员可锁定/解锁用户的 API Key
- 锁定后用户无法使用、修改或删除该 Key
- 前端显示锁定状态并禁用相关操作
2. 请求头规则系统
- 将 endpoint.headers 升级为 header_rules
- 支持 set(设置)、drop(删除)、rename(重命名)操作
- 前端提供可视化规则编辑界面
- 包含数据迁移脚本
Close #37 Close #86 Close #88
|
2026-01-16 01:18:54 +08:00 |
|
fawney19
|
ea45918561
|
refactor: 统一请求头处理逻辑到 headers.py
- 新增 src/core/headers.py 集中管理头部处理函数
- 扩展 api_format_metadata.py 添加 extra_headers 和 protected_keys 配置
- 将各 adapter 中重复的头部方法提取到基类,统一调用 headers.py
- 移除 transport.py 中未使用的 build_provider_headers 函数
- 添加 headers 模块的单元测试
|
2026-01-15 22:25:56 +08:00 |
|
fawney19
|
80887dd2cc
|
fix: 修复请求详情抽屉的默认状态问题
- viewMode 默认改为 formatted,避免按钮被禁用
- currentExpandDepth 默认改为 0,与收缩状态一致
|
2026-01-15 19:23:01 +08:00 |
|
 fawney19andLewisPen
|
b2731eddf3
|
fix: 修复对话视图合并后的问题
- 移除未使用的变量 index
- 修复展开/收缩按钮在非请求体Tab被禁用的问题
- 删除未使用的 copyJsonToClipboard 函数
Co-Authored-By: LewisPen <LewisPen@nyadoo.com>
|
2026-01-15 19:18:32 +08:00 |
|
fawney19
|
18ac4fe2f3
|
Merge branch 'pr-99'
|
2026-01-15 19:16:01 +08:00 |
|
fawney19
|
81b7b74fd4
|
refactor: 简化优先级拖拽交换逻辑并优化用户配额处理
- 优先级拖拽改为直接交换优先级值,而非重新编号
- 添加 Provider 优先级的点击编辑功能
- 创建用户时由后端统一处理默认配额逻辑
- 移除前端 getDefaultQuota API 调用和后端对应端点
Close #97
|
2026-01-15 18:59:01 +08:00 |
|
fawney19
|
dd387735d4
|
feat: LDAP 用户隐藏密码修改功能并应用默认配额
- /me API 返回 auth_source 字段
- 前端 Settings 页面对 LDAP 用户隐藏密码修改卡片
- LDAP 用户首次登录创建时使用系统默认配额
Close #98
|
2026-01-15 17:57:58 +08:00 |
|
fawney19
|
d9645fa062
|
feat: 用户创建和注册时使用系统配置的默认配额
- 新增 /api/admin/users/defaults/quota 接口获取默认配额
- 用户注册时从系统配置读取默认配额
- 管理员创建用户时自动获取并使用系统默认配额
|
2026-01-15 17:41:04 +08:00 |
|
fawney19
|
026f4b9c0e
|
fix: 修复模型测试时正则映射支持及缓存装饰器实例方法兼容
- ModelsTab 加载时并行获取模型映射预览数据
- 测试模型时自动识别正则映射并使用映射名称和指定 key
- 密钥变更后并行刷新模型列表和模型映射
- 修复 cache_decorator 对实例方法的 context 参数解析
|
2026-01-15 17:26:52 +08:00 |
|
fawney19
|
a223819dd7
|
refactor: 提取正则工具模块并清理废弃代码
前端:
- 新增 model-mapping-regex.ts 工具模块,统一正则验证和 LRU 缓存
- ModelMappingsTab/RoutingTab 重构为使用 computed 缓存匹配结果
- 移除多个组件中未使用的变量和函数
- 添加 HTMLImageElement/HTMLIFrameElement 到 ESLint 全局类型
- 修复 vitest 需要 --experimental-require-module 的问题
后端:
- 移除废弃的异步数据库支持 (get_async_db, AsyncSession)
- 将 async_utils 从 database/ 迁移到 utils/
- 改进 database.py 类型标注
- 修复 email 模块的 aiosmtplib 可选导入类型问题
|
2026-01-15 17:03:19 +08:00 |
|
fawney19
|
bc16c0eec8
|
style(usage): 调整使用记录表格类型列宽度
|
2026-01-15 13:44:22 +08:00 |
|
fawney19
|
0d26fd8c5a
|
fix(usage): 修复活跃请求中成本字段为 0 时被错误置为 None 的问题
将 actual_cost 和 rate_multiplier 的判断条件从 `if value else None`
改为 `if value is not None else None`,确保数值 0 不会被误判为 False
|
2026-01-15 13:40:52 +08:00 |
|
fawney19
|
bc2b430ec3
|
style(usage): 请求链路节点改回居中布局并修复 TypeScript 兼容性
- 将节点布局从两端对齐改回居中展示
- 将 findLastIndex 替换为向后兼容的 for 循环实现
|
2026-01-15 13:29:22 +08:00 |
|
fawney19
|
6de113b852
|
refactor(update): 改用 GitHub Tags API 检查更新
- 从 Releases API 切换到 Tags API 获取版本信息
- 从 annotated tag 的 message 中获取更新日志
- 支持从 tagger 或 commit 获取发布时间
|
2026-01-15 12:30:05 +08:00 |
|
fawney19
|
abe65ad01b
|
fix(usage): 解耦活跃请求轮询与全局刷新逻辑
1秒轮询始终用于活跃请求的实时更新,不再受全局刷新状态影响
|
2026-01-15 12:19:46 +08:00 |
|
fawney19
|
76f648b4eb
|
feat(usage): 活跃请求轮询增加缓存与成本字段
- 后端 getActiveRequests 返回新增 cache_creation/read_input_tokens、actual_cost、rate_multiplier
- 前端轮询时同步更新这些字段到记录中
- 优化刷新逻辑:全局刷新开启时停止1秒轮询,关闭时恢复
|
2026-01-15 12:13:47 +08:00 |
|
fawney19
|
514bf7e3ed
|
feat(usage): 改进请求追踪与缓存预热
- 区分请求重试与故障转移:新增 has_retry 标识亲和缓存重试
- 修正候选 TTFB 计算:记录候选自身的首字节时间而非全局时间
- Streaming 状态同步 rate_multiplier,支持按 API 格式配置
- 新增缓存预热服务:启动时预热仪表盘统计、热力图、每日统计
- 优化缓存 TTL 配置:仪表盘统计 2 分钟、热力图和每日统计 10 分钟
- 自动刷新间隔从 10 秒调整为 5 秒
|
2026-01-15 11:45:46 +08:00 |
|
fawney19
|
24b65d76b5
|
feat(models): Key 白名单变更时自动关联 GlobalModel
- Key 创建/更新/自动获取模型后,检查 allowed_models 变化
- 根据 GlobalModel 的映射规则自动创建 Provider 关联
- 添加缓存失效机制确保映射规则能匹配新白名单
|
2026-01-15 10:32:48 +08:00 |
|
fawney19
|
5a81be0756
|
fix(routing): 有效 Keys 计数考虑模型白名单权限
路由预览中计算有效 Keys 数量时,除了检查 is_active 状态外,
还需检查 Key 的白名单是否允许当前模型(包括模型映射匹配)。
|
2026-01-15 09:21:30 +08:00 |
|
fawney19
|
dc2996988b
|
fix(routing): 移除 Key 的 RPM 显示并修复有效提供商计数
- 移除链路预览中 Key 健康度后面的 RPM 数值显示
- 修复有效提供商计数逻辑,无 Key 的提供商不再计入有效数量
|
2026-01-15 02:59:15 +08:00 |
|
 fawney19andAAEE86
|
c51f94ee87
|
style(ui): 将请求链路轨道布局从居中改为两端对齐
fix #94
Co-Authored-By: AAEE86 <AAEE86@users.noreply.github.com>
|
2026-01-15 02:44:06 +08:00 |
|
fawney19
|
5d34426428
|
feat(models): 路由预览显示 Key 白名单的模型映射匹配
- 后端返回 GlobalModel 的 model_mappings 正则模式
- 前端用映射模式匹配 Key 白名单,显示匹配的模型名
|
2026-01-15 02:36:00 +08:00 |
|
fawney19
|
4835ca13f5
|
feat(models): 模型映射支持按提供商分组并自动关联
- 映射匹配结果按提供商分组显示,支持单个关联
- 保存映射规则时自动批量关联未关联的提供商
- 优化模型详情加载逻辑,并行获取最新数据
- 移除冗余的调度器日志输出
|
2026-01-15 02:11:44 +08:00 |
|
fawney19
|
84f46d5ea7
|
fix: 修复移动端菜单背景样式不一致问题
closes #93
|
2026-01-15 00:39:38 +08:00 |
|
fawney19
|
19209181dc
|
feat(models): 添加全局 Key 白名单数据支持模型映射实时匹配
- 新增 GlobalKeyWhitelistItem 类型定义
- 路由预览 API 返回 all_keys_whitelist 字段,包含所有活跃 Provider 的 Key 白名单
- 前端 ModelMappingsTab 改用全局白名单数据进行实时匹配
|
2026-01-15 00:35:28 +08:00 |
|
fawney19
|
154ec94c58
|
fix: 关闭 auto_fetch_models 时保留锁定的模型
|
2026-01-14 21:31:05 +08:00 |
|
fawney19
|
8909e6741a
|
Merge PR #92: feat(keys): trigger immediate model fetch when auto_fetch_models is enabled
|
2026-01-14 21:30:29 +08:00 |
|
fawney19
|
45a58a4a03
|
fix: 修复模型测试使用记录中 API 格式显示错误
将 check_endpoint 方法中的 api_format 参数从 cls.name 改为 cls.FORMAT_ID,
确保使用记录存储标准枚举值(如 GEMINI)而非内部名称(如 gemini.chat)
|
2026-01-14 21:19:34 +08:00 |
|
fawney19
|
0348b7d915
|
refactor: 废弃 rate_multiplier 字段,改进成本倍率回退逻辑
- 在前后端模型中为 rate_multiplier 添加 @deprecated 标记
- 修复 rate_multipliers 回退逻辑:当 rate_multipliers 存在但未配置当前格式时使用 1.0
- ModelMappingsTab: 删除映射后自动保存,简化空状态提示
- ModelManagement: 添加 refreshModel 事件在映射更新后刷新模型数据
- CacheAwareScheduler: 添加映射匹配调试日志,移除 candidate_models 限制
|
2026-01-14 21:07:28 +08:00 |
|
fawney19
|
bec9c3a989
|
refactor: 将模型别名(alias)统一重命名为模型映射(mapping)
- 重命名 API: alias-mapping-preview -> mapping-preview
- 重命名类型: AliasMatchedModel -> MappingMatchedModel 等
- 重命名字段: model_aliases -> model_mappings, alias_matched_model -> mapping_matched_model
- 重命名前端组件: ModelAliasesTab -> ModelMappingsTab
- 重命名验证函数: validate_model_aliases -> validate_model_mappings
- 同步更新相关测试用例
- 补充 ModelService 中新增/批量创建模型时的缓存失效逻辑
|
2026-01-14 19:35:41 +08:00 |
|
fawney19
|
24ece00e93
|
test(aware-scheduler): 添加模型支持检查逻辑的单元测试
测试 _check_model_support_for_global_model 方法的以下场景:
- Provider 没有配置模型时返回 False
- Provider 只有其他模型时返回 False
- Provider 有匹配模型时返回 True
- Provider 模型未激活时返回 False
|
2026-01-14 18:22:22 +08:00 |
|
fawney19
|
b272109055
|
refactor(model-permissions): 简化 allowed_models 为纯列表格式
移除按 API 格式区分的字典模式(Dict[str, List[str]]),统一使用简单列表格式。
- 删除 normalize_allowed_models 的 api_format 参数
- 删除 check_model_allowed 的 api_format 参数
- 简化 merge_allowed_models 为直接列表交集
- 移除前端的字典模式兼容代码和警告 UI
- 删除 is_format_mode、convert_to_format_mode 等辅助函数
|
2026-01-14 17:57:21 +08:00 |
|
fawney19
|
133f3108f0
|
chore(config): 移除冗余的超时配置注释说明
|
2026-01-14 17:31:24 +08:00 |
|
fawney19
|
0ed053b02f
|
fix(model-resolution): 修复模型解析优先级和别名匹配范围
- 调整 ModelCacheService 解析优先级:优先直接匹配 GlobalModel.name,
避免被 provider_model_name 误导到错误的 GlobalModel
- 为 check_model_allowed_with_aliases 新增 candidate_models 参数,
限制别名匹配只能落到 Provider 实际配置的模型名上
- 对 allowed_set 排序以确保别名匹配结果的确定性
- 调整 HTTP_READ_TIMEOUT 默认值从 300s 改为 60s
- 优化 ModelMappingTab 组件布局,将正则表达式提取到 Key 级别展示
- 补充 .env.example 超时配置文档
|
2026-01-14 17:29:04 +08:00 |
|
fawney19
|
97d66a8d0c
|
feat(trace): 在请求链路追踪中记录并展示首字时间(TTFB)
将 first_byte_time_ms 添加到候选记录的 extra_data 中,
并在前端时间线组件中展示该指标。
|
2026-01-14 16:41:58 +08:00 |
|
fawney19
|
ec3c5994d9
|
fix(orchestration): 处理流式响应中的嵌入式错误
- 新增对 EmbeddedErrorException 的处理逻辑
- 客户端错误(如 prompt too long)停止重试并抛出异常
- 服务端错误允许重试或故障转移
- 将 _is_client_error 改为公开方法 is_client_error
|
2026-01-14 15:43:02 +08:00 |
|
fawney19
|
1f6e384d2b
|
fix(ui): 居中对齐时间线轨道内容
|
2026-01-14 15:43:01 +08:00 |
|
fawney19
|
5e4099a588
|
fix(proxy): 新增响应头过滤函数,避免透传不兼容的上游头
添加 filter_proxy_response_headers 函数过滤 content-length、content-encoding、
transfer-encoding 等 hop-by-hop 和 body-dependent 头,防止客户端解码失败。
统一在 chat_handler_base、cli_handler_base、stream_telemetry 和 usage recorder
中使用该函数处理响应头透传。
|
2026-01-14 14:50:33 +08:00 |
|
fawney19
|
68737b9ed6
|
refactor(ui): 重构模型映射功能,简化交互并提取独立组件
- ModelMappingDialog: 简化为单栏选择面板布局,移除拖拽排序和优先级编辑
- ProviderDetailDrawer: 移出别名映射预览,使用独立 ModelMappingTab 组件
- 新增 ModelMappingTab 组件: 统一展示精确映射和正则映射,支持连接测试
|
2026-01-14 14:28:13 +08:00 |
|
fawney19
|
a8813cfb89
|
feat(keys): 新增密钥自动获取模型功能
- 添加 auto_fetch_models 字段支持定时从上游 API 获取可用模型
- 添加 locked_models 字段支持锁定模型,刷新时不会被删除
- 新增 ModelFetchScheduler 调度器定期执行模型获取任务
- 前端 KeyFormDialog 添加自动获取模型开关
- 前端 KeyAllowedModelsEditDialog 支持模型锁定操作
- ProviderDetailDrawer 显示密钥同步状态
- 数据库迁移添加新字段
|
2026-01-14 13:12:19 +08:00 |
|
fawney19
|
3b194d3c23
|
fix(ui): 移除未声明的组件 props 和 emits 消除 Vue 警告
- ModelManagement: 移除 ModelDetailDrawer 未使用的 providers、loading-providers props 和 refresh-providers 事件
- ProviderDetailDrawer: 移除 BatchAssignModelsDialog 未声明的 provider-identifier prop
- 删除不再使用的 refreshSelectedModelProviders 函数
|
2026-01-14 00:28:28 +08:00 |
|