- 03 Feb, 2026 1 commit
-
-
ducky authored
-
- 25 Jan, 2026 1 commit
-
-
shaw authored
- 解析 x-codex-* 响应头获取正确的重置时间 - 7d 限制用尽时使用 codex_7d_reset_after_seconds - 提取 Normalize() 方法统一窗口规范化逻辑
-
- 20 Jan, 2026 2 commits
-
-
yangjianbo authored
- Update/BulkUpdate 按不可调度字段触发缓存刷新 - GatewayCache 支持多前缀会话键清理 - 模型路由与混合调度优化粘性会话处理 - 补充调度与缓存相关测试覆盖
-
yangjianbo authored
- Update/BulkUpdate 按不可调度字段触发缓存刷新 - GatewayCache 支持多前缀会话键清理 - 模型路由与混合调度优化粘性会话处理 - 补充调度与缓存相关测试覆盖
-
- 19 Jan, 2026 1 commit
-
-
cyhhao authored
-
- 17 Jan, 2026 1 commit
-
-
nick8802754751 authored
- 前端: EditAccountModal 和 CreateAccountModal 添加 409 mixed_channel_warning 处理 - 前端: 弹出确认框让用户确认混合渠道风险 - 后端: 过滤 OpenAI 请求中的 prompt_cache_retention 参数(上游不支持) - 添加中英文翻译 Co-authored-by:factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
-
- 16 Jan, 2026 1 commit
-
-
IanShaw027 authored
opencode 请求不带 session_id/conversation_id,导致粘性会话失效。现在按 header 优先、prompt_cache_key 兜底生成 session hash,并补充单测验证优先级。
-
- 15 Jan, 2026 6 commits
-
-
IanShaw027 authored
实现了完整的Codex工具调用拦截和自动修正系统,解决OpenCode使用Codex模型时的工具调用兼容性问题。 **核心功能:** 1. **工具名称自动映射** - apply_patch/applyPatch → edit - update_plan/updatePlan → todowrite - read_plan/readPlan → todoread - search_files/searchFiles → grep - list_files/listFiles → glob - read_file/readFile → read - write_file/writeFile → write - execute_bash/executeBash/exec_bash/execBash → bash 2. **工具参数自动修正** - bash: 自动移除不支持的 workdir/work_dir 参数 - edit: 自动将 path 参数重命名为 file_path - 支持 JSON 字符串和对象两种参数格式 3. **流式响应集成** - 在 SSE 数据流中实时修正工具调用 - 支持多种 JSON 结构(tool_calls, function_call, delta, choices等) - 不影响响应性能和用户体验 4. **统计和监控** - 记录每次工具修正的详细信息 - 提供修正统计数据查询 - 便于问题排查和性能优化 **实现文件:** - `openai_tool_corrector.go`: 工具修正核心逻辑(250行) - `openai_tool_corrector_test.go`: 完整的单元测试(380+行) - `openai_gateway_service.go`: 流式响应集成 - `openai_gateway_service_tool_correction_test.go`: 集成测试 **测试覆盖:** - 工具名称映射测试(18个映射规则) - 参数修正测试(bash workdir、edit path等) - SSE数据修正测试(多种JSON结构) - 统计功能测试 - 所有测试通过
✅ **解决的问题:** 修复了 OpenCode 使用 sub2api 中转 Codex 时,因工具名称和参数不兼容导致的工具调用失败问题。 Codex 模型有时会忽略指令文件中的工具映射说明,导致调用不存在的工具(如 apply_patch)。 现在通过流式响应拦截,自动将错误的工具调用修正为 OpenCode 兼容的格式。 **参考文档:** - OpenCode 工具规范: https://opencode.ai/docs/ - Codex Bridge 指令: backend/internal/service/prompts/codex_opencode_bridge.txt -
cyhhao authored
-
cyhhao authored
-
yangjianbo authored
Co-Authored-By:Claude Opus 4.5 <noreply@anthropic.com>
-
yangjianbo authored
新增 OpenAI/Claude TokenProvider 与缓存键生成 扩展 OAuth 缓存失效覆盖更多平台 统一 OAuth 缓存前缀与依赖注入
-
yangjianbo authored
-
- 14 Jan, 2026 4 commits
-
-
墨颜 authored
- 新增 accounts.rate_multiplier(默认 1.0,允许 0) - 使用 usage_logs.account_rate_multiplier 记录倍率快照,避免历史回算 - 统计/导出/管理端展示账号口径费用(total_cost * account_rate_multiplier)
-
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时的聚合问题 ## 测试结果 所有单元测试通过
✅ -
IanShaw027 authored
-
IanShaw027 authored
-
- 13 Jan, 2026 1 commit
-
-
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 的讨论
-
- 12 Jan, 2026 6 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
根据不同平台和账号类型处理 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
-
yangjianbo authored
- 调度热路径优先读 Redis 快照,保留分组排序语义 - outbox 回放 + 全量重建纠偏,失败重试不推进水位 - 自动 Atlas 基线对齐并同步调度配置示例
-
ianshaw authored
- 添加 StreamTimeoutSettings 配置结构体和系统设置 - 实现 TimeoutCounterCache Redis 计数器用于累计超时次数 - 在 RateLimitService 添加 HandleStreamTimeout 方法 - 在 gateway_service、openai_gateway_service、antigravity_gateway_service 中调用超时处理 - 添加后端 API 端点 GET/PUT /admin/settings/stream-timeout - 添加前端配置界面到系统设置页面 - 支持配置:启用开关、超时阈值、处理方式、暂停时长、触发阈值、阈值窗口 默认配置: - 启用:true - 超时阈值:60秒 - 处理方式:临时不可调度 - 暂停时长:5分钟 - 触发阈值:3次 - 阈值窗口:10分钟
- 11 Jan, 2026 3 commits
-
-
IanShaw027 authored
-
IanShaw027 authored
**新增功能**: - 新建ops_upstream_error_events表存储上游服务错误详情 - 支持记录上游429/529/5xx错误的详细上下文信息 - 提供按时间范围查询上游错误事件的API **后端改动**: 1. 模型层(ops_models.go, ops_port.go): - 新增UpstreamErrorEvent结构体 - 扩展Repository接口支持上游错误事件CRUD 2. 仓储层(ops_repo.go): - 实现InsertUpstreamErrorEvent写入上游错误 - 实现GetUpstreamErrorEvents按时间范围查询 3. 服务层(ops_service.go, ops_upstream_context.go): - ops_service: 新增GetUpstreamErrorEvents查询方法 - ops_upstream_context: 封装上游错误上下文构建逻辑 4. Handler层(ops_error_logger.go): - 新增GetUpstreamErrorsHandler处理上游错误查询请求 5. Gateway层集成: - antigravity_gateway_service.go: 429/529错误时记录上游事件 - gateway_service.go: OpenAI 429/5xx错误时记录 - gemini_messages_compat_service.go: Gemini 429/5xx错误时记录 - openai_gateway_service.go: OpenAI 429/5xx错误时记录 - ratelimit_service.go: 429限流错误时记录 **数据记录字段**: - request_id: 关联ops_logs主记录 - platform/model: 上游服务标识 - status_code/error_message: 错误详情 - request_headers/response_body: 调试信息(可选) - created_at: 错误发生时间
-
IanShaw027 authored
- 添加实时QPS/TPS历史数据追踪(最近60个数据点) - 在平均QPS/TPS上方添加SVG脉搏线图(sparkline) - 将延迟和TTFT卡片的指标布局从2列改为3列 - 恢复Max指标显示(P95/P90/P50/Avg/Max)
-
- 10 Jan, 2026 2 commits
- 09 Jan, 2026 4 commits
-
-
cyhhao authored
-
Edric.Li authored
* feat(api-key): add IP whitelist/blacklist restriction and usage log IP tracking - Add IP restriction feature for API keys (whitelist/blacklist with CIDR support) - Add IP address logging to usage logs (admin-only visibility) - Remove billing_type column from usage logs UI (redundant) - Use generic "Access denied" error message for security Backend: - New ip package with IP/CIDR validation and matching utilities - Database migrations for ip_whitelist, ip_blacklist (api_keys) and ip_address (usage_logs) - Middleware IP restriction check after API key validation - Input validation for IP/CIDR patterns on create/update Frontend: - API key form with enable toggle for IP restriction - Shield icon indicator in table for keys with IP restriction - Removed billing_type filter and column from usage views * fix: update API contract tests for ip_whitelist/ip_blacklist fields Add ip_whitelist and ip_blacklist fields to expected JSON responses in API contract tests to match the new API key schema.
-
Edric Li authored
- Add IP restriction feature for API keys (whitelist/blacklist with CIDR support) - Add IP address logging to usage logs (admin-only visibility) - Remove billing_type column from usage logs UI (redundant) - Use generic "Access denied" error message for security Backend: - New ip package with IP/CIDR validation and matching utilities - Database migrations for ip_whitelist, ip_blacklist (api_keys) and ip_address (usage_logs) - Middleware IP restriction check after API key validation - Input validation for IP/CIDR patterns on create/update Frontend: - API key form with enable toggle for IP restriction - Shield icon indicator in table for keys with IP restriction - Removed billing_type filter and column from usage views
-
cyhhao authored
-
- 08 Jan, 2026 2 commits
-
-
cyhhao authored
- Add normalizeInputForCodexAPI function to convert AI SDK multi-part content format to simplified format expected by ChatGPT Codex API - AI SDK sends: {"content": [{"type": "input_text", "text": "..."}]} - Codex API expects: {"content": "..."} - Only applies to OAuth accounts (ChatGPT internal API) - API Key accounts remain unchanged (OpenAI Platform API supports both) -
Edric Li authored
- Add claude_code_only field to restrict groups to Claude Code clients only - Add fallback_group_id for non-Claude Code requests to use alternate group - Implement ClaudeCodeValidator for User-Agent detection - Add group-level session binding isolation (groupID in Redis key) - Prevent cross-group sticky session pollution - Update frontend with Claude Code restriction controls
-
- 07 Jan, 2026 1 commit
-
-
Edric Li authored
在使用记录中添加 user_agent 字段,用于记录 API 请求的 User-Agent 头信息, 便于分析客户端类型和调试。 变更内容: - 新增数据库迁移 028_add_usage_logs_user_agent.sql - 更新 UsageLog 模型和 Ent Schema 添加 user_agent 字段 - 更新 Repository 层的 Create 和 scanUsageLog 方法 - 更新 RecordUsageInput 结构体支持传入 UserAgent - 更新 Claude/OpenAI/Gemini 三个网关 Handler 传递 UserAgent
🤖 Generated with [Claude Code](https://claude.com/claude-code ) Co-Authored-By:Claude Opus 4.5 <noreply@anthropic.com>
-
- 05 Jan, 2026 2 commits
-
-
yangjianbo authored
实现 allow_insecure_http 并在关闭校验时执行最小格式验证 - 关闭 allowlist 时要求 URL 可解析且 scheme 合规 - 响应头过滤关闭时使用默认白名单策略 - 更新相关文档、示例与测试覆盖
-
yangjianbo authored
实现安全开关默认关闭与响应头透传逻辑 - URL 校验与响应头过滤支持开关并覆盖流式路径 - 非流式 Content-Type 透传/默认值按配置生效 - 接入 go test、golangci-lint 与前端 lint/typecheck - 补充相关测试与配置/文档说明
-
- 04 Jan, 2026 2 commits
-
-
yangjianbo authored
修正测试中的 APIKey 名称引用 移除不可达返回与未使用函数 统一 gofmt 格式并处理 Close 错误
-
yangjianbo authored
- 以读取时间戳判定流式间隔超时,避免下游阻塞误判 - antigravity 流式读取使用 MaxLineSize 配置 - 事件通道缓冲提升到 16 测试: go test ./...
-