Copilot
1771555fe9
Add final SSE error events for streaming endpoints when retries are exhausted
...
* Initial plan
* Add final SSE error events for all streaming services
Co-authored-by: bbbugg <80089841+bbbugg@users.noreply.github.com >
* revert openai
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: bbbugg <80089841+bbbugg@users.noreply.github.com >
Co-authored-by: bbbugg <daming20120101@163.com >
Enhance error handling by extracting nested JSON from error messages in SSE events
Enhance error handling for content generation and streaming endpoints
Enhance error handling for content generation and streaming endpoints
Enhance error handling for content generation and streaming endpoints
Enhance error handling for content generation and streaming endpoints
还原vertex和openai的更改,只保留gemini
2025-08-28 22:10:32 +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
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
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
Shuai Lin
f3d9cb2b85
security: implement HTTP access log API key redaction
...
- Add AccessLogFormatter class with regex patterns for API key detection
- Create setup_access_logging() function to configure uvicorn access logs
- Support redaction for Google/Gemini (AIza*) and OpenAI (sk-*) API keys
- Configure main.py to use custom access logging with redaction
- Prevent API key exposure in HTTP access logs like "POST /verify-key/AIza..."
Now access logs show: "POST /verify-key/AIzaxx...xyzxyz" instead of full keys
2025-07-21 10:09:29 +08:00
Shuai Lin
6abda7d902
security: Implemented API key redaction for secure logging
...
- Add redact_key_for_logging() helper function to show only first/last 6 chars
- Fix API key exposure in app/service/key/key_manager.py line 68
- Apply key redaction across all Python files with API key logging
- Standardize logging security across 17 files including routers, services, handlers
2025-07-21 02:03:29 +08:00
snaily
b25cf7d978
fix: 网址上下文功能默认设置为false
2025-07-20 21:18:30 +08:00
snaily
07481ca972
fix: 修复_build_payload函数中的条件逻辑,确保正确处理思考预算配置
2025-07-20 19:29:19 +08:00
snaily
9c285e38ef
chore: Enhance project description, add badges, and clarify licensing terms
2025-07-20 16:08:52 +08:00
snaily
ebfa1d247c
chore: 更新版本号至2.2.1
v2.2.1
2025-07-20 13:43:18 +08:00
snaily
cdb85ef9b7
fix: 更新思考预算配置,使用_get_real_model函数获取真实模型
2025-07-20 13:42:36 +08:00
snaily
7006522c13
feat: 修复gemini-cli调用工具失败的问题
2025-07-20 13:19:59 +08:00
snaily
530c958afc
chore: 更新版本号至2.2.0
v2.2.0
2025-07-20 01:47:35 +08:00
snaily
57d861b578
feat: 增加URL上下文理解功能
...
本次提交引入了一项新功能,允许模型在对话中理解所提供URL的上下文。
主要变更:
- **配置**:新增了 `URL_CONTEXT_ENABLED` 和 `URL_CONTEXT_MODELS` 两个配置项,用于控制此功能的开关和支持的模型列表。
- **后端服务**:在 `gemini_chat_service`、`openai_chat_service` 和 `vertex_express_chat_service` 中,为支持的模型动态添加 `urlContext` 工具。
- **前端界面**:在配置编辑器页面增加了相应的UI控件,方便用户启用/禁用该功能并管理支持的模型列表。
- **文档**:更新了 `.env.example`、`README.md` 和 `README_ZH.md`,包含了新配置项的说明。
2025-07-20 01:46:18 +08:00
snaily
99664298b9
fix: 更新思考配置,针对gemini-2.5-pro模型设置思考预算为128
2025-07-19 22:20:55 +08:00
snaily
a6fe5a7022
fix: 更新思考模型预算说明,使用-1表示自动预算
2025-07-19 22:11:36 +08:00
snaily
1918dad602
chore: 更新版本号至2.1.13
v2.1.13
2025-07-19 15:24:36 +08:00
snaily
69399c291e
fix: 在密钥验证成功时重置失败计数
2025-07-19 10:49:09 +08:00