wanglinjie
f863e3065b
Merge remote-tracking branch 'origin/main'
2025-09-03 09:38:15 +08:00
wanglinjie
1314e0ee09
feat(upload): add support for Aliyhun OSS
2025-09-03 09:38:01 +08:00
snaily
81d92370ad
Merge pull request #351 from SquirrelJimmy/main
2025-09-03 03:27:45 +08:00
SquirrelJimmy
5f6eba62cc
feat: 增加配置页面的picgo 自定义url, 处理自定义picgo的返回结果
2025-09-01 11:52:12 +08:00
snaily
a8a265c2a7
chore(docker): 注释掉 adminer 服务
...
暂时移除 Adminer 服务,因为它目前不是必需的,并且可以减少运行的容器数量,简化本地开发环境。
2025-08-31 22:00:36 +08:00
snaily
ee21e50305
Merge pull request #303 from vickyyd:main
...
Add adminer for convenient mysql database management
2025-08-31 21:58:34 +08:00
snaily
611559d298
feat(image): 支持多模态模型输入base64格式图片
...
- 在消息转换中,增加对 `data:image/png;base64,...` 格式图片的支持,允许用户直接在输入中提供base64编码的图片。
- 调整图片处理逻辑,使其能够根据模型名称判断是否启用多模态能力,避免非多模态模型错误处理图片链接。
- 当未配置图床时,模型输出的图片将回退为base64格式,确保图片内容始终可用。
- 优化了相关函数的参数传递和代码格式,提高了代码的可读性和健壮性。
2025-08-31 21:39:12 +08:00
snaily
b0127e6fc2
Merge pull request #344 from bbbugg/base64-fallback
2025-08-31 05:37:19 +08:00
bbbugg
1d15a21ce5
Remove upload folder check for Cloudflare imgbed
2025-08-31 00:33:33 +08:00
snaily
c206aa8e4a
Merge pull request #316 from ConstasJ/modify-readme
...
docs: 在README里添加关于端点的说明
2025-08-31 00:24:53 +08:00
SquirrelJimmy
3f040b7075
feat: 增加自定义picgo api url
2025-08-29 12:49:12 +08:00
Copilot
8711088ebc
Fix circular import issue between config, logger, and helpers modules ( #2 )
...
* Initial plan
* Fix circular import by removing top-level settings import from helpers.py
Co-authored-by: bbbugg <80089841+bbbugg@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: bbbugg <80089841+bbbugg@users.noreply.github.com >
2025-08-28 16:56:04 +08:00
Copilot
bb6c629aef
Implement base64 fallback for image handling when no uploader is configured ( #1 )
...
* Initial plan
* Implement base64 fallback for image handling when no uploader configured
Co-authored-by: bbbugg <80089841+bbbugg@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: bbbugg <80089841+bbbugg@users.noreply.github.com >
2025-08-28 16:56:04 +08:00
snaily
4af17ce55d
chore: 更新版本号至2.2.5
v2.2.5
2025-08-18 17:27:42 +08:00
snaily
2001bfdcd9
fix(api): 统一错误日志时间戳并传递 request_datetime
...
- 统一 add_error_log 的 request_time:优先使用 request_datetime,
否则使用 datetime.now(),去除 timezone.utc,避免与请求日志时区不一致
- 在 Gemini/OpenAI/Vertex/Embedding 等服务的异常处理处补充传入
request_datetime,使错误日志与请求日志可一一对应
- stats: 移除失败记录的错误日志时间窗匹配与 error_log_id 附带,降低查询开销
与误关联风险;建议通过统一时间戳(key + request_time)或独立错误日志
查询接口完成关联
- 调整部分导入顺序与长行换行等代码风格,无功能改动
BREAKING CHANGE: 统计详情接口不再返回 error_log_id 字段。需要关联错误日志的
客户端请改为基于 key 与 request_time 在错误日志接口中检索。
2025-08-18 17:26:53 +08:00
snaily
669123f348
feat(ui): 支持值得注意的Key多选、全选与批量操作
...
为“值得注意的Key”列表新增可见复选框和全选开关,提供
批量验证/复制/删除操作,并优化选择逻辑与样式。
- attentionKeysList 每行新增可见复选框并设置 data-key
- 新增“全选”和批量操作栏,实时显示已选数量
- getSelectedKeys/updateBatchActions/toggleSelectAll
适配 attention 根节点,且仅作用于可见项
- initializeKeySelectionListeners 增加 attention 事件绑定
- fetchAndRenderAttentionKeys 阻止按钮冒泡、绑定复选框变更,
在加载成功/失败后刷新批量栏状态
- attention 列表不与 valid/invalid 主列表同步勾选,避免交叉影响
- CSS 仅隐藏有效/无效列表复选框,新增 attention 列表
hover/选中态样式
- 增强空值判断,避免批量栏或全选元素缺失时报错
2025-08-18 16:31:48 +08:00
ConstasJ
d06e418a61
docs: 修改README.md,添加关于端点的说明
2025-08-18 15:42:46 +08:00
snaily
fa6745454e
chore: 更新版本号至2.2.4
v2.2.4
2025-08-18 09:11:49 +08:00
snaily
1aa3d267bb
feat(api,ui): 新增24h错误码最高Key统计与面板
...
- 新增 GET /api/stats/attention-keys 接口,统计最近24小时指定
状态码(默认429)错误次数最多的 Key,仅统计内存中的 Key,
支持 limit 与 status_code 参数
- StatsService 新增 get_attention_keys_last_24h,按 api_key 分组计数并
降序返回
- UI 新增“值得注意的Key”卡片:支持 429/403/400 快捷切换、自定义状态码
与数量限制,默认展示 429 前 10
- 列表项支持验证、查看 24h 详情、复制、删除等快捷操作
- 将 Chart.js 与页面脚本改为 defer,保证 DOM 就绪与执行顺序
- 修复:补充获取数量输入框引用,避免初始化未声明变量报错
- 其他:微调日志输出格式
2025-08-18 06:28:48 +08:00
snaily
e9601ca76c
feat(api,ui): 新增按Key调用详情与错误日志查找并联动前端
...
引入按密钥维度的请求详情及错误日志关联,新增错误日志精确
查找接口,并扩展统计时间维度,提升故障定位与可观测性。
- 新增 /api/logs/errors/lookup 接口:支持按 gemini_key / timestamp /
status_code 与时间窗口查找最接近的错误日志;ErrorLogDetailResponse
增加 error_code 字段
- Stats 接口增强:get_api_call_details 返回 status_code、latency_ms,
并在失败时尝试匹配 error_log_id;新增 /api/stats/key-details 获取指
定密钥调用详情;新增 8h 时间段
- DB 层:add_error_log 支持传入 request_datetime(默认使用 UTC);新增
find_error_log_by_info 封装按 key/时间窗口/状态码的查询
- 前端 keys_status:趋势图支持 8 小时区间;调用详情表新增状态码/耗时与
失败详情按钮;可按 key 查看期内调用详情并查看匹配错误日志;优化统计
摘要展示与模态层级(z-index)
- OpenAIChatService:错误记录携带请求时间;改进日志与健壮性处理
2025-08-18 05:19:29 +08:00
snaily
01312317a1
feat(ui): 添加 API 调用趋势图及时间区间切换
...
- 在 keys_status 页面引入 Chart.js(CDN),新增“调用趋势图”卡片
- 支持 1分钟/1小时/24小时切换,默认展示 1小时
- 前端从 /api/stats/details?period= 拉取数据,按时间桶聚合成功/失败并绘制
- 调整样式与布局:图表卡片跨列显示,固定容器高度并适配小屏
- 便于可视化监控调用成功/失败趋势,辅助排障与容量评估
2025-08-18 03:50:52 +08:00
snaily
7827283d0a
fix(ui): 移除 keys_status 自动刷新开关及相关逻辑
...
移除 keys_status 页面的自动刷新开关与定时器逻辑,删除模板中的
开关控件,并移除 initializeAutoRefreshControls 函数及其调用。周
期性刷新会重置分页和搜索状态,影响使用体验;保留手动刷新按钮以
在需要时更新数据。
2025-08-18 03:19:59 +08:00
snaily
96c4b4fa50
fix: 移除API密钥分页按钮的onclick事件
2025-08-18 00:55:51 +08:00
snaily
892392742d
chore: 更新版本号至2.2.3
v2.2.3
2025-08-16 17:45:52 +08:00
snaily
380e6426ed
- 添加API密钥分页显示功能,每页显示20个密钥
...
- 实现分页控件和搜索功能的集成
- 优化API密钥的数据处理逻辑,从DOM操作改为数组操作
- 修改登录成功后重定向路径从/config改为/keys
- 重构routes.py的import语句,按字母顺序排列
- 改进代码格式和缩进风格
2025-08-16 17:42:16 +08:00
snaily
d2906d89a6
style(router): 优化错误日志路由代码格式
...
- 移除多余的空白行
- 简化删除所有错误日志的日志记录逻辑
- 统一代码缩进和空行格式
2025-08-16 03:43:36 +08:00
snaily
13e1db7d69
style(database,static): 优化代码格式并本地化静态资源
...
- 重新组织 database/services.py 的导入语句,按照标准顺序排列
- 统一代码格式,包括函数参数对齐和尾随逗号
- 优化 delete_all_error_logs 函数,移除不必要的计数查询以提高性能
- 添加本地字体文件 fonts.css,包含 Inter 字体的多种字重和语言支持
- 本地化 Tailwind CSS 脚本,减少外部依赖
- 更新 base.html 模板以使用本地静态资源
2025-08-16 03:41:42 +08:00
snaily
40c9689eae
Merge pull request #249 from sanjusss:fix_248
...
fix #248
2025-08-16 03:08:16 +08:00
snaily
548dcccf2f
Merge pull request #286 from 4Crusaders:fix/gemini-structured-output-tools-conflict
...
fix: 修复Gemini模型不支持同时使用tools和结构化输出的问题
2025-08-16 01:13:18 +08:00
snaily
b52092a72b
Merge pull request #300 from zenyanbo/main
2025-08-16 01:06:18 +08:00
snaily
67efd067c6
Merge pull request #270 from cxyfer/feature/gemini-embed-endpoints
2025-08-16 00:40:18 +08:00
kikii16
fd39c2c9cb
Add adminer for convenient mysql database management
2025-08-13 02:21:23 +08:00
zenyanbo
f58ae2b340
feat: add support for the n parameter in OpenAI-compatible requests. Now, when you make a request to the /v1/chat/completions endpoint with the n parameter, it will be correctly mapped to candidateCount in the Gemini API request, allowing you to receive multiple completions.
2025-08-11 17:39:18 +08:00
4Crusaders
f51a4d20ad
fix: 修复Gemini模型不支持同时使用tools和结构化输出的问题
...
- 添加_is_structured_output_request函数检测是否为结构化JSON输出请求
- 当检测到请求指定responseMimeType为application/json时,跳过gemini-balance主动添加的所有工具
- 仅在非结构化输出场景下,gemini-balance才会自动添加codeExecution、googleSearch、urlContext等工具
- 解决"Tool use with a response mime type: 'application/json' is unsupported"错误
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-06 14:07:33 +08:00
cxyfer
b89d3ea144
feat: Add Gemini API embeddings compatibility with embedContent and batchEmbedContents methods
2025-07-30 02:28:53 +08:00
sanjusss
3d6b5063d5
fix #248
...
修复部分情况下,假流式无法发出空白回复的问题。简化空白回复的发送逻辑。
2025-07-25 19:44:01 +08:00
snaily
a6558b4668
chore: 更新版本号至 2.2.2
v2.2.2
2025-07-25 17:08:08 +08:00
snaily
6f714649a7
fix: 修复以第一个key获取模型列表,如果key失效将无法获取模型的问题
2025-07-25 17:07:15 +08:00
snaily
ae775760dd
feat(keys): 按错误码分组展示校验失败的密钥
...
- **功能增强 (密钥状态页面):**
- 在密钥校验结果弹窗中,将校验失败的密钥按照HTTP错误码进行分组展示。
- 每个错误码分组都是可折叠的,并显示该分组下的密钥数量。
- 为每个分组添加了独立的“复制”按钮,方便用户一键复制相同错误类型的所有密钥。
- 优化了错误详情的展示方式,使其在分组内切换,界面更整洁。
- 此项改动极大地改善了当大量密钥校验失败时的用户体验,能够更快速地定位和处理问题。
- **错误修复 (OpenAI服务):**
- 修复了 `openai_chat_service.py` 中一个正则表达式的错误。该正则是用于从错误日志中提取HTTP状态码,错误的 `\\d+` 已被修正为 `\d+`,确保能正确捕获状态码。
2025-07-25 16:44:27 +08:00
snaily
d475ccdece
refactor: 移除未使用的 Tuple 导入
2025-07-25 12:18:20 +08:00
snaily
4eed3a48db
Merge pull request #244 from icesixgod:feature/proxy-health-check
...
feat: 实现代理健康检查功能
2025-07-25 12:16:08 +08:00
snaily
26f3dbd12b
feat: 为无效密钥列表添加筛选和搜索功能
...
- 添加无效密钥的失败次数筛选控件
- 添加无效密钥的搜索框和每页显示数量选择器
- 实现无效密钥列表的筛选、搜索和分页功能
- 优化相关CSS样式以保持界面一致性
2025-07-25 01:08:41 +08:00
snaily
7af53de782
feat: 添加下拉菜单和批量操作功能
...
- 新增 /api/keys/all 端点获取所有密钥
- 添加下拉菜单界面,提供复制全部密钥和验证所有密钥选项
- 重构批量重置逻辑,改为逐个处理以提供更好的进度反馈
- 新增批量操作进度模态框,实时显示操作状态和日志
- 在验证模态框中添加批次大小配置选项
- 优化用户体验,提供更直观的批量操作界面
2025-07-25 00:35:56 +08:00
snaily
2270f6d998
refactor: 重构密钥状态页面为客户端动态加载
...
- 新增 key_routes.py 分离密钥相关路由逻辑
- 将密钥列表从服务器端渲染改为 JavaScript 动态加载
- 优化 keys_status 页面错误处理,提供默认数据结构
- 在 KeyManager 中添加 get_all_keys_with_fail_count 方法
- 移除服务器端模板中的静态密钥渲染代码
这次重构提升了页面加载性能和用户体验,同时改善了错误处理机制。
2025-07-24 23:23:11 +08:00
icesixgod
9f5892a987
feat: 实现代理健康检查功能
...
添加完整的代理检测系统,包括:
后端功能:
- 新增代理检测服务模块 (app/service/proxy/)
* ProxyCheckService: 核心检测逻辑,支持HTTP/HTTPS/SOCKS5代理
* 内置缓存机制,避免重复检测 (10秒缓存期)
* 支持并发检测,可配置最大并发数
- 新增4个API端点 (app/router/config_routes.py):
* POST /api/config/proxy/check - 单个代理检测
* POST /api/config/proxy/check-all - 批量代理检测
* GET /api/config/proxy/cache-stats - 缓存统计
* POST /api/config/proxy/clear-cache - 清空缓存
前端功能:
- 代理列表中每项添加状态图标和检测按钮
- 支持单个代理实时检测
- 新增检测所有代理功能按钮
- 代理检测结果模态框,显示:
* 检测进度条和状态
* 可用/不可用代理统计
* 详细的检测结果列表(响应时间、错误信息)
* 重试失败代理功能
技术特性:
- 10秒超时机制,避免长时间等待
- 异步并发检测,提升批量检测效率
- 缓存机制减少重复请求
- 完整的错误处理和用户友好提示
- 响应式UI设计,支持实时状态更新
2025-07-24 19:41:03 +08:00
snaily
ccd4722a77
style(log): 整理导入语句
2025-07-24 16:54:25 +08:00
snaily
feb57d7cf2
Merge pull request #235 from lins05/support-set-admin-session-expire
2025-07-24 16:38:39 +08:00
snaily
e7394776af
Merge pull request #234 from lins05/hide-keys-in-logs
2025-07-24 16:36:00 +08:00
Shuai Lin
0fa9638dd5
Support custom admin session expire via ADMIN_SESSION_EXPIRE env
2025-07-21 12:16:25 +08:00
Shuai Lin
9d4d6464bf
security: enhance API key redaction with comprehensive testing and error handling
...
- Refactored redaction logic to use centralized helper function
- Added robust error handling in AccessLogFormatter
- Improved regex patterns for better OpenAI key detection
- Added comprehensive unit tests covering edge cases and error scenarios
- Enhanced input validation with descriptive error placeholders
2025-07-21 10:40:24 +08:00