- 15 Jan, 2026 3 commits
-
-
longgexx authored
在 usage_log_repo_integration_test.go 中添加本地的 truncateToDayUTC 辅助函数,修复因主代码重命名该函数导致的测试编译错误。 Co-Authored-By:Claude Opus 4.5 <noreply@anthropic.com>
-
longgexx authored
将 dashboard_aggregation_repo.go 和 usage_log_repo.go 中的时区处理 从 UTC 改为使用服务器配置时区(默认 Asia/Shanghai),确保"今日" 统计数据与用户预期一致。 Co-Authored-By:Claude Opus 4.5 <noreply@anthropic.com>
-
longgexx authored
将仪表盘统计中的"今日"时间范围从UTC时区改为服务器配置时区, 使其与使用记录页面保持一致。 修改内容: - GetDashboardStats: 使用 timezone.Now() 和 timezone.Today() - GetDashboardStatsWithRange: 同上 影响的统计项: - 今日请求 (TodayRequests) - 今日 Token (TodayTokens) - 今日费用 (TodayCost/TodayActualCost) - 今日新用户 (TodayNewUsers) - 今日活跃用户 (ActiveUsers)
-
- 14 Jan, 2026 10 commits
-
-
longgexx authored
更新 usage_log_repo_integration_test.go 中的测试用例, 使其与 GetUsageTrendWithFilters 和 GetModelStatsWithFilters 方法的新签名保持一致。
-
longgexx authored
修复两个问题: 1. Token使用趋势图和模型分布图未响应筛选条件 2. 上午时段选择今天刷新后日期回退到前一天 前端修改: - 更新 dashboard API 类型定义,添加 model、account_id、group_id、stream 参数支持 - 修改 UsageView 趋势图加载逻辑,传递所有筛选参数到后端 - 修复日期格式化函数,使用本地时区避免 UTC 转换导致的日期偏移 后端修改: - Handler 层:接收并解析所有筛选参数(model、account_id、group_id、stream) - Service 层:传递完整的筛选参数到 Repository 层 - Repository 层:SQL 查询动态添加所有过滤条件 - 更新接口定义和测试 mock 以保持一致性 影响范围: - /admin/dashboard/trend 端点现支持完整筛选 - /admin/dashboard/models 端点现支持完整筛选 - 用户在后台使用记录页面选择任意筛选条件时,趋势图和模型分布图会实时响应 - 日期选择器在任何时区下都能正确保持今天的选择
-
longgexx authored
修复两个问题: 1. Token使用趋势图和模型分布图未响应筛选条件 2. 上午时段选择今天刷新后日期回退到前一天 前端修改: - 更新 dashboard API 类型定义,添加 model、account_id、group_id、stream 参数支持 - 修改 UsageView 趋势图加载逻辑,传递所有筛选参数到后端 - 修复日期格式化函数,使用本地时区避免 UTC 转换导致的日期偏移 后端修改: - Handler 层:接收并解析所有筛选参数(model、account_id、group_id、stream) - Service 层:传递完整的筛选参数到 Repository 层 - Repository 层:SQL 查询动态添加所有过滤条件 - 更新接口定义和所有调用点以保持一致性 影响范围: - /admin/dashboard/trend 端点现支持完整筛选 - /admin/dashboard/models 端点现支持完整筛选 - 用户在后台使用记录页面选择任意筛选条件时,趋势图和模型分布图会实时响应 - 日期选择器在任何时区下都能正确保持今天的选择
-
Wesley Liddick authored
fix(网关): 修复账号选择中的调度器快照延迟问题
-
ianshaw authored
## 问题描述 调度器快照更新存在0.5-1秒的延迟(Outbox轮询间隔),导致在账号被限流或过载后的短时间窗口内, 可能仍会被选中,造成请求失败。 ## 根本原因 账号选择逻辑依赖调度器快照(listSchedulableAccounts),但快照更新有延迟: - Outbox轮询: 每1秒检查一次变更事件 - 全量重建: 每300秒重建一次 - 时间窗口: 账号状态变更后0.5-1秒内,快照可能未更新 ## 解决方案 在账号选择循环中添加IsSchedulable()实时检查,作为第二道防线: 1. 第一道防线: 调度器快照过滤(可能有延迟) 2. 第二道防线: IsSchedulable()实时检查(本次修复) IsSchedulable()会检查: - RateLimitResetAt: 限流重置时间 - OverloadUntil: 过载持续时间 - TempUnschedulableUntil: 临时不可调度时间 - Status: 账号状态 - Schedulable: 可调度标志 ## 修改范围 ### OpenAI Gateway Service - SelectAccountForModelWithExclusions: 添加IsSchedulable()检查 - SelectAccountWithLoadAwareness: 添加IsSchedulable()检查 ### Gateway Service (Claude/Gemini/Antigravity) - 负载感知选择候选账号筛选: 添加IsSchedulable()检查 - selectAccountForModelWithPlatform: 添加IsSchedulable()检查 - selectAccountWithMixedScheduling: 添加IsSchedulable()检查 ### 测试用例 - OpenAI: 添加2个测试用例验证限流账号过滤 - Gateway: 添加2个测试用例验证限流和过载账号过滤 ### 其他修复 - ops_repo_preagg.go: 修复platform为NULL时的聚合问题 ## 测试结果 所有单元测试通过
✅ -
shaw authored
- 显示完整余额精度,避免四舍五入导致的退款失败 - 添加"全部"按钮,一键填入完整余额 - 移除最小金额限制,支持任意正数金额
-
Wesley Liddick authored
fix(openai): OAuth 请求强制 store=false
-
yangjianbo authored
-
-
yangjianbo authored
避免上游 Store 必须为 false 的错误 仅在缺失或 true 时写回 store 测试: go test ./internal/service -run TestApplyCodexOAuthTransform 测试: make test-backend(golangci-lint 已单独执行)
-
- 13 Jan, 2026 14 commits
-
-
Wesley Liddick authored
fix: 修复opencode 适配openai 套餐的错误,通过sub2api完美转发 opencode
-
yangjianbo authored
openai_codex_transform_test.go:36、backend/internal/service/ openai_codex_transform_test.go:89、backend/internal/service/ openai_codex_transform_test.go:104)。 -
yangjianbo authored
-
yangjianbo authored
完善 function_call_output 续链校验与引用匹配 续链场景强制 store=true,过滤 input 时避免副作用 补充续链判断与过滤相关单元测试 测试: go test ./...
-
Wesley Liddick authored
fix(openai): 增强 OpenCode 兼容性和模型规范化
-
ianshaw authored
-
ianshaw authored
## 主要改动 1. **模型规范化扩展到所有账号** - 将 Codex 模型规范化(如 gpt-5-nano → gpt-5.1)应用到所有 OpenAI 账号类型 - 不再仅限于 OAuth 非 CLI 请求 - 解决 Codex CLI 使用 ChatGPT 账号时的模型兼容性问题 2. **reasoning.effort 参数规范化** - 自动将 `minimal` 转换为 `none` - 解决 gpt-5.1 模型不支持 `minimal` 值的问题 3. **Session/Conversation ID fallback 机制** - 从请求体多个字段提取 session_id/conversation_id - 优先级:prompt_cache_key → session_id → conversation_id → previous_response_id - 支持 Codex CLI 的会话保持 4. **Tool Call ID fallback** - 当 call_id 为空时使用 id 字段作为 fallback - 确保 tool call 输出能正确匹配 - 保留 item_reference 类型的 items 5. **Header 优化** - 添加 conversation_id 到允许的 headers - 移除删除 session headers 的逻辑 ## 相关 Issue - 参考 OpenCode issue #3118 关于 item_reference 的讨论
-
IanShaw027 authored
## 问题 - 使用OpenAI API key时,opencode客户端可能因instructions不兼容而报错 - 依赖外部GitHub获取instructions,网络故障时会失败 ## 解决方案 1. 将codex CLI标准instructions嵌入到项目中 2. 实现自动fallback机制: - 优先使用opencode GitHub的instructions - 失败时自动fallback到本地codex CLI instructions 3. 添加辅助函数用于错误检测和手动替换 ## 改动 - 新增: internal/service/prompts/codex_cli_instructions.md - 从codex项目复制的标准instructions - 使用go:embed嵌入到二进制文件 - 修改: internal/service/openai_codex_transform.go - 添加embed支持 - 增强getOpenCodeCodexHeader()的fallback逻辑 - 新增GetCodexCLIInstructions()公开函数 - 新增ReplaceWithCodexInstructions()用于手动替换 - 新增IsInstructionError()用于错误检测 ## 优势 - 零停机:GitHub不可用时仍能正常工作 - 离线可用:不依赖外部网络 - 兼容性:使用标准codex CLI instructions - 部署简单:instructions嵌入到二进制文件
-
yangjianbo authored
-
shaw authored
-
Wesley Liddick authored
feat(gateway): 优化 Antigravity/Gemini 思考块处理 此提交解决了思考块 (thinking blocks) 在转发过程中的兼容性问题
-
Wesley Liddick authored
fix: 同步 OpenAI GPT-5 模型列表并完善参数处理
-
Wesley Liddick authored
fix: adjust OpenCode OpenAI example store placement
-
Wesley Liddick authored
feat(ops): 添加运维监控全屏模式 & 优化滚动条
-
- 12 Jan, 2026 13 commits
-
-
ianshaw authored
- 移除 Codex CLI 的模型映射跳过逻辑 - 添加详细的模型映射日志,包含账号名称和请求类型 - 确保所有 OpenAI 请求都能正确应用账号配置的模型映射
-
ianshaw authored
问题: - 当账号的 base_url 配置为 https://example.com/v1/chat/completions 时 - 代码直接追加 /responses,导致路径变成 /v1/chat/completions/responses - 上游返回 404 错误 修复: - 在追加 /responses 前,先移除 base_url 中的 /chat/completions 后缀 - 确保最终路径为 https://example.com/v1/responses 影响范围: - OpenAI API Key 账号的测试接口 - OpenAI API Key 账号的实际网关请求 Related-to: #231
-
ianshaw authored
更新 API 密钥页面 OpenCode 配置提示信息: - 补充支持 opencode.jsonc 后缀名 - 说明可使用默认 provider(openai/anthropic/google)或自定义 provider_id - 说明 API Key 支持直接配置或通过 /connect 命令配置 - 保留"示例仅供参考,模型与选项可按需调整"的提示 配置文件路径:~/.config/opencode/opencode.json(或 opencode.jsonc)
-
ianshaw authored
根据不同平台和账号类型处理 max_output_tokens 参数: - OpenAI OAuth (Responses API): 保留 max_output_tokens(支持) - OpenAI API Key: 删除 max_output_tokens(不支持) - Anthropic (Claude): 转换 max_output_tokens 为 max_tokens - Gemini: 删除 max_output_tokens(由 Gemini 专用转换处理) - 其他平台: 删除(安全起见) 同时处理 max_completion_tokens 参数,仅在 OpenAI OAuth 时保留。 修复客户端(如 OpenCode)发送不支持参数导致上游返回 400 错误的问题。 Related-to: #231
-
ianshaw authored
修复编辑账号页面 GPT-5 模型只显示 3 个的问题: - 原来只有: gpt-5, gpt-5-mini, gpt-5-nano - 现在添加完整的 22 个模型,包括: * GPT-5 系列: gpt-5, gpt-5-codex, gpt-5-chat, gpt-5-pro, gpt-5-mini, gpt-5-nano 及各时间戳版本 * GPT-5.1 系列: gpt-5.1, gpt-5.1-codex, gpt-5.1-codex-max, gpt-5.1-codex-mini 及各版本 * GPT-5.2 系列: gpt-5.2, gpt-5.2-codex, gpt-5.2-pro 及各版本 - 更新快捷预设按钮,新增 GPT-5.1, GPT-5.2, GPT-5.1 Codex 选项 与后端定价文件 (model_prices_and_context_window.json) 保持一致。 Fixes issue introduced in fb86002e (feat: 添加模型白名单选择器组件) Related-to: fb86002e
-
cyhhao authored
-
cyhhao authored
-
Edric Li authored
- 默认隐藏滚动条,悬停时显示 - 支持 Webkit (Chrome/Safari/Edge) 和 Firefox - 滚动条样式与暗色主题适配
-
Edric Li authored
- 支持通过 URL 参数 ?fullscreen=1 进入全屏模式 - 全屏模式下隐藏非必要 UI 元素(选择器、按钮、提示等) - 增大健康评分圆环和字体以提升可读性 - 支持 ESC 键退出全屏 - 添加全屏按钮的 i18n 翻译
-
xiluo authored
此提交解决了思考块 (thinking blocks) 在转发过程中的兼容性问题。 主要变更: 1. **思考块优化 (Thinking Blocks)**: - 在 AntigravityGatewayService 中增加了 sanitizeThinkingBlocks 处理,强制移除思考块中不支持的 cache_control 字段(避免 Anthropic/Vertex AI 报错) - 实现历史思考块展平 (Flattening):将非最后一条消息中的思考块转换为普通文本块,以绕过上游对历史思考块签名的严格校验 - 增加 cleanCacheControlFromGeminiJSON 作为最后一道防线,确保转换后的 Gemini 请求中不残留非法的 cache_control 2. **GatewayService 缓存控制优化**: - 更新缓存控制逻辑,跳过 thinking 块(thinking 块不支持 cache_control 字段) - 增加 removeCacheControlFromThinkingBlocks 函数强制清理 关联 Issue: #225
-
shaw authored
-
shaw authored