fawney19
|
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
|
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 |
|
NyaDoo
|
9285dc896c
|
Merge branch 'fawney19:master' into master
|
2026-01-16 16:24:41 +08:00 |
|
fawney19
|
6c98816f9f
|
feat: 实现功能模块系统,支持模块的动态注册与启用控制
- 新增 ModuleRegistry 核心,支持模块注册、可用性检查和启用状态管理
- 新增模块管理 API(管理端和公共端),提供模块状态查询和启用控制
- 将 LDAP 功能迁移到模块系统,支持通过环境变量和数据库配置控制
- 前端新增模块管理页面和 store,支持模块启用/禁用操作
- 路由守卫集成模块状态检查,未激活模块的页面自动重定向
- 面包屑导航支持模块配置页面的层级显示
- Switch 组件新增 disabled 属性支持
|
2026-01-16 16:14:12 +08:00 |
|
LewisPen
|
ed1d828f85
|
feat: 实现对话轮次折叠视图
- 新增轮次分组逻辑,将消息按 user/assistant 配对分组
- 新增 TurnCard 组件,支持折叠/展开单个轮次
- 新增 TurnBadges 组件,显示思考/工具/图片/错误图标
- 历史轮次默认折叠,最新轮次默认展开
- 折叠时显示用户和助手消息摘要
- 统一 UI 设计规范:边距、字体、图标、圆角
|
2026-01-16 15:54:21 +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 |
|
LewisPen
|
691a71ac05
|
refactor: 将 BlockRenderer 和 ConversationView 样式改为 Tailwind
移除手写 CSS,统一使用 Tailwind 原子类,符合项目设计规范:
- BlockRenderer: 删除 260 行 scoped CSS,改用 Tailwind 类
- ConversationView: 删除 38 行 scoped CSS,改用 Tailwind 类
- 使用样式映射对象管理消息块的角色样式
|
2026-01-16 11:22:11 +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
|
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
|
80887dd2cc
|
fix: 修复请求详情抽屉的默认状态问题
- viewMode 默认改为 formatted,避免按钮被禁用
- currentExpandDepth 默认改为 0,与收缩状态一致
|
2026-01-15 19:23:01 +08:00 |
|
fawney19
|
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 |
|
LewisPen
|
38607332b9
|
feat(usage): 请求详情页面添加对话视图功能
|
2026-01-15 18:37:59 +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
|
bc2b430ec3
|
style(usage): 请求链路节点改回居中布局并修复 TypeScript 兼容性
- 将节点布局从两端对齐改回居中展示
- 将 findLastIndex 替换为向后兼容的 for 循环实现
|
2026-01-15 13:29:22 +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
|
dc2996988b
|
fix(routing): 移除 Key 的 RPM 显示并修复有效提供商计数
- 移除链路预览中 Key 健康度后面的 RPM 数值显示
- 修复有效提供商计数逻辑,无 Key 的提供商不再计入有效数量
|
2026-01-15 02:59:15 +08:00 |
|
fawney19
|
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
|
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
|
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
|
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
|
1f6e384d2b
|
fix(ui): 居中对齐时间线轨道内容
|
2026-01-14 15:43:01 +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 |
|
fawney19
|
5374add5d8
|
feat(update): 增强更新检查功能,展示发布日志和发布时间
- 后端从 GitHub Tags API 改为 Releases API,获取更丰富的发布信息
- 新增 release_notes 和 published_at 字段
- 前端更新对话框展示发布时间和 Markdown 格式的更新日志
- 使用 DOMPurify 对 Markdown 渲染结果进行 XSS 防护
- 简化 GlobalModel 缓存失效逻辑,合并同步/异步调用
|
2026-01-13 20:29:16 +08:00 |
|
fawney19
|
8c4c5fa394
|
feat(ui): 增加模型连接性测试功能并优化对话框 ESC 键处理
- 模型测试: 新增测试按钮,支持多 API 格式选择
- ESC 键: 重构为全局栈管理,支持嵌套对话框
- 修复: check_endpoint 使用 FORMAT_ID 替代 name
- 优化: Redis 连接池添加健康检查
Co-authored-by: htmambo <htmambo@users.noreply.github.com>
|
2026-01-13 20:11:09 +08:00 |
|