0xff26b9a8
|
4f0c2b794c
|
style: gofmt antigravity_gateway_service.go
|
2026-01-22 14:38:55 +08:00 |
|
0xff26b9a8
|
e756064c19
|
fix(antigravity): 修复非流式 Claude To Antigravity 响应内容为空的问题
- 修复 TransformGeminiToClaude 的 JSON 解析逻辑,当 V1InternalResponse
解析成功但 candidates 为空时,尝试直接解析为 GeminiResponse 格式
- 修复 handleClaudeStreamToNonStreaming 收集流式响应的逻辑,累积所有
chunks 的内容而不是只保留最后一个(最后一个 chunk 通常 text 为空)
- 新增 mergeCollectedPartsToResponse 函数,合并所有类型的 parts
(text、thinking、functionCall、inlineData),保持原始顺序
- 连续的普通 text parts 合并为一个,thinking/functionCall/inlineData 保持原样
|
2026-01-22 14:17:59 +08:00 |
|
0xff26b9a8
|
da48df06d2
|
refactor(antigravity): 提取并同步 Schema 清理逻辑至 schema_cleaner.go
主要变更:
1. 重构代码结构:
- 将 CleanJSONSchema 及其相关辅助函数从 request_transformer.go 提取到独立的 schema_cleaner.go 文件中,实现逻辑解耦。
2. 逻辑优化与修正:
- 参考 Antigravity-Manager (json_schema.rs) 的实现逻辑,修正了 Schema 清洗策略。
|
2026-01-20 23:41:53 +08:00 |
|
song
|
8b071cc665
|
fix(antigravity): restore signature retry and base order
|
2026-01-17 22:50:50 +08:00 |
|
song
|
959f6c538a
|
fix(antigravity): remove thinking sanitation
|
2026-01-17 22:21:48 +08:00 |
|
song
|
217b3b59c0
|
fix(antigravity): drop MarkUnavailable
|
2026-01-17 21:59:32 +08:00 |
|
song
|
ec916a3197
|
fix(antigravity): remove signature retry
|
2026-01-17 21:56:57 +08:00 |
|
song
|
22eb72e0f9
|
fix(antigravity): restore url fallback behavior
|
2026-01-17 21:50:09 +08:00 |
|
song
|
07ba64c666
|
fix(antigravity): handle url-level 429 without failover
|
2026-01-17 21:37:32 +08:00 |
|
song
|
f22bc59fe3
|
fix(antigravity): route signature retry through url fallback
|
2026-01-17 21:15:33 +08:00 |
|
song
|
5e9f5efbe3
|
chore: log antigravity signature retry 429
|
2026-01-17 18:22:53 +08:00 |
|
song
|
a7a0017aa8
|
chore: gofmt antigravity gateway service
|
2026-01-17 18:22:43 +08:00 |
|
song
|
b9b4db3df5
|
Merge upstream/main
|
2026-01-17 18:00:07 +08:00 |
|
song
|
5a6f60a954
|
fix(antigravity): 区分 URL 级别和账户配额级别的 429 限流
- "Resource has been exhausted" → URL 级别限流,立即切换 URL
- "exhausted your capacity on this model" → 账户配额限流,重试 3 次(指数退避)后标记限流
|
2026-01-17 11:11:18 +08:00 |
|
song
|
31933c8a60
|
fix: 删除未使用的字段修复 lint 错误
|
2026-01-17 10:40:28 +08:00 |
|
song
|
78bccd032d
|
refactor(antigravity): 提取公共重试循环函数减少重复代码
- 新增 antigravityRetryLoop 函数统一处理 Forward 和 ForwardGemini 的重试逻辑
- 429 日志增加 base_url 字段便于调试
- 删除重复的 shouldRetryUpstreamError 方法
|
2026-01-17 10:28:31 +08:00 |
|
song
|
ac7503d95f
|
fix(antigravity): 429 时也切换 URL 重试
- 429 优先切换到下一个 URL 重试
- 只有所有 URL 都返回 429 时才限流账户并返回错误
- 与 client.go 中的逻辑保持一致
|
2026-01-17 02:14:57 +08:00 |
|
song
|
69c4b17a9b
|
feat(antigravity): 动态 URL 排序,最近成功的优先使用
- URLAvailability 新增 lastSuccess 字段追踪最近成功的 URL
- GetAvailableURLs 返回列表时优先放置 lastSuccess
- 所有 Antigravity API 调用成功后调用 MarkSuccess 更新优先级
|
2026-01-17 01:54:14 +08:00 |
|
song
|
34d6b0a601
|
feat(gateway): 账户切换次数和 Antigravity 限流时间可配置
- gateway.max_account_switches: 账户切换最大次数,默认 10
- gateway.max_account_switches_gemini: Gemini 账户切换次数,默认 3
- gateway.antigravity_fallback_cooldown_minutes: Antigravity 429 fallback 限流时间,默认 5 分钟
- Antigravity 429 不再重试,直接标记账户限流
|
2026-01-16 20:18:30 +08:00 |
|
song
|
2055a60bcb
|
fix(antigravity): 429 重试3次后限流账户
- 收到429后重试最多3次(指数退避)
- 3次都失败后调用 handleUpstreamError 限流账户
- 移除无效的 URL fallback 逻辑(当前只有一个URL)
|
2026-01-16 18:51:07 +08:00 |
|
song
|
cc892744bc
|
fix(antigravity): 429 fallback 改为 5 分钟并限流整个账户
- fallback 时间从 1 分钟改为 5 分钟
- fallback 时直接限流整个账户而非仅限制 quota scope
|
2026-01-16 18:09:34 +08:00 |
|
song
|
b4abfae4de
|
fix: Antigravity 测试连接使用最小 token 消耗
- buildGeminiTestRequest: 输入 "." + maxOutputTokens: 1
- buildClaudeTestRequest: 输入 "." + MaxTokens: 1
- buildGenerationConfig: 支持透传 MaxTokens 参数
|
2026-01-16 10:31:55 +08:00 |
|
IanShaw027
|
63711067e6
|
refactor(ops): 完善gateway服务ops集成
|
2026-01-14 14:30:00 +08:00 |
|
IanShaw027
|
060699c3b8
|
refactor(ops): 更新gateway服务集成ops功能
|
2026-01-14 12:40:49 +08:00 |
|
song
|
9a22d1a690
|
refactor: 提取 getOrCreateGeminiParts 减少重复代码
将两个 merge 函数中重复的 Gemini 响应结构访问逻辑提取为公共函数。
|
2026-01-13 13:25:55 +08:00 |
|
song
|
c9d21d53e6
|
fix: 修复 Antigravity 非流式响应文本丢失问题
Gemini 流式响应是增量的,需要累积所有 chunk 的文本内容。
原代码只保留最后一个有 parts 的 chunk,导致实际文本被空
text + thoughtSignature 的最终 chunk 覆盖。
添加 collectedTextParts 收集所有文本片段,返回前合并。
|
2026-01-13 13:04:03 +08:00 |
|
song
|
e1015c2759
|
fix: 修复 Antigravity 图片生成响应丢失问题
流式转非流式时,图片数据在中间 chunk 返回,最后一个 chunk 只有
finishReason,导致只保留最后 chunk 时图片丢失。
添加 collectedImageParts 收集所有图片 parts,并在返回前合并。
|
2026-01-13 12:58:05 +08:00 |
|
Wesley Liddick
|
0df7385c4e
|
Merge pull request #226 from xilu0/main
feat(gateway): 优化 Antigravity/Gemini 思考块处理 此提交解决了思考块 (thinking blocks) 在转发过程中的兼容性问题
|
2026-01-13 09:39:43 +08:00 |
|
xiluo
|
524d80ae1c
|
feat(gateway): 优化 Antigravity/Gemini 思考块处理
此提交解决了思考块 (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
|
2026-01-12 13:36:59 +00:00 |
|
ianshaw
|
2a0758bdfe
|
feat(gateway): 添加流超时处理机制
- 添加 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分钟
|
2026-01-11 21:54:52 -08:00 |
|
IanShaw027
|
7ebca553ef
|
feat(ops): 实现上游错误事件记录与查询功能
**新增功能**:
- 新建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: 错误发生时间
|
2026-01-11 15:30:27 +08:00 |
|
Song Siyu
|
7d1fe818be
|
feat: antigravity 配额域限流 + SSE 上限 (#222)
* fix: 添加 gemini-3-flash 前缀映射支持 gemini-3-flash-preview
* feat(antigravity): 增强请求参数和注入 Antigravity 身份 system prompt
* feat: antigravity 配额域限流
* chore: 调整 SSE 单行上限到 25MB
* chore: 提升 SSE 单行上限到 40MB
|
2026-01-09 22:00:14 +08:00 |
|
song
|
11bfc807d7
|
merge upstream/main
|
2026-01-09 21:37:27 +08:00 |
|
song
|
da1f3d61be
|
feat: antigravity 配额域限流
|
2026-01-09 17:35:02 +08:00 |
|
shaw
|
2d83941aaa
|
feat(antigravity): 添加 URL fallback 机制 (sandbox → daily → prod)
|
2026-01-09 10:36:56 +08:00 |
|
song
|
dc3cd62125
|
Merge remote-tracking branch 'upstream/main'
|
2026-01-08 22:52:18 +08:00 |
|
shaw
|
b015a3bd8a
|
fix(antigravity): 修复频繁出现429错误的问题
|
2026-01-08 20:06:32 +08:00 |
|
song
|
bc404d4fc1
|
merge: 合并 upstream/main 使用上游版本解决冲突
|
2026-01-08 18:01:29 +08:00 |
|
shaw
|
6e8188ed64
|
fix(antigravity): 修复请求频繁429的问题
|
2026-01-08 17:27:35 +08:00 |
|
song
|
4e3476a669
|
fix: 添加 gemini-3-flash 前缀映射支持 gemini-3-flash-preview
|
2026-01-06 15:09:21 +08:00 |
|
song
|
195e227c04
|
merge: 合并 upstream/main 并保留本地图片计费功能
|
2026-01-06 10:49:26 +08:00 |
|
IanShaw027
|
34aa77e4e1
|
fix(backend): 删除未使用的 sleepAntigravityBackoff 函数
修复 golangci-lint unused 检查失败
|
2026-01-05 20:15:36 +08:00 |
|
song
|
5b1907fe61
|
fix: 图片计费代码审查问题修复
- isImageGenerationModel 改为精确匹配/前缀匹配,避免误匹配
- 新增 normalizePrice 函数,支持负数清除价格配置
- 更新注释说明 Gemini API 每次请求只生成一张图片
- 添加测试用例验证不会误匹配自定义模型名
|
2026-01-05 17:14:06 +08:00 |
|
song
|
d4c2b723a5
|
feat: 图片生成计费功能
- 新增 Group 图片价格配置(image_price_1k/2k/4k)
- BillingService 新增 CalculateImageCost 方法
- AntigravityGatewayService 支持识别图片生成模型并按次计费
- UsageLog 新增 image_count 和 image_size 字段
- 前端分组管理支持配置图片价格(antigravity 和 gemini 平台)
- 图片计费复用通用计费能力(余额检查、扣费、倍率、订阅限额)
|
2026-01-05 17:07:29 +08:00 |
|
ianshaw
|
471b1c3eeb
|
fix(frontend): 修复重构时遗漏的 SVG 图标,创建统一图标管理组件
- 创建 Icon.vue 统一管理 SVG 图标(20+ 常用图标)
- 修复 AccountActionMenu 中被错误替换为 emoji 的图标
- 修复 ProfileView 和 GroupsView 中的 emoji 图标
- 图标支持 size/strokeWidth 属性,便于复用
|
2026-01-04 22:26:33 -08:00 |
|
ianshaw
|
ae3d6fd776
|
fix(antigravity): 扩展 isSignatureRelatedError 检测 thinking 结构错误
- 添加对 "Expected thinking/redacted_thinking" 错误的检测
- 修复 antigravity 服务中 thinking 模式启用时的结构约束错误
- 确保此类错误能触发重试逻辑
|
2026-01-04 18:34:19 -08:00 |
|
IanShaw027
|
aa6f253374
|
merge: 合并 upstream/main 并解决冲突
解决了以下文件的冲突:
- backend/internal/handler/admin/setting_handler.go
- 采用 upstream 的字段对齐风格和 *Configured 字段名
- 添加 EnableIdentityPatch 和 IdentityPatchPrompt 字段
- backend/internal/handler/gateway_handler.go
- 采用 upstream 的 billingErrorDetails 错误处理方式
- frontend/src/api/admin/settings.ts
- 采用 upstream 的 *_configured 字段名
- 添加 enable_identity_patch 和 identity_patch_prompt 字段
- frontend/src/views/admin/SettingsView.vue
- 合并 turnstile_secret_key_configured 字段
- 保留 enable_identity_patch 和 identity_patch_prompt 字段
|
2026-01-04 23:17:15 +08:00 |
|
IanShaw027
|
f60f943d0c
|
fix: 修复代码审查报告中的4个关键问题
1. 资源管理冗余(ForwardGemini双重Close)
- 错误分支读取body后立即关闭原始body,用内存副本重新包装
- defer添加nil guard,避免重复关闭
- fallback成功时显式关闭旧body,确保连接释放
2. Schema校验丢失(cleanJSONSchema移除字段无感知)
- 新增schemaCleaningWarningsEnabled()支持环境变量控制
- 实现warnSchemaKeyRemovedOnce()在非release模式下告警
- 移除关键验证字段时输出warning,包含key和path
3. UI响应式风险(UsersView操作菜单硬编码定位)
- 菜单改为先粗定位、渲染后测量、再clamp到视口内
- 添加max-height + overflow-auto,超出时可滚动
- 增强交互:点击其它位置/滚动/resize自动关闭或重新定位
4. 身份补丁干扰(TransformClaudeToGemini默认注入)
- 新增TransformOptions + TransformClaudeToGeminiWithOptions
- 系统设置新增enable_identity_patch、identity_patch_prompt
- 完整打通handler/dto/service/frontend配置链路
- 默认保持启用,向后兼容现有行为
测试:
- 后端单测全量通过:go test ./...
- 前端类型检查通过:npm run typecheck
|
2026-01-04 22:49:40 +08:00 |
|
IanShaw027
|
87426e5dda
|
fix(backend): 改进 thinking/tool block 签名处理和重试策略
主要改动:
- request_transformer: thinking block 缺少签名时降级为文本而非丢弃,保留内容并在上层禁用 thinking mode
- antigravity_gateway_service: 新增两阶段降级策略,先处理 thinking blocks,如仍失败且涉及 tool 签名错误则进一步降级 tool blocks
- gateway_request: 新增 FilterSignatureSensitiveBlocksForRetry 函数,支持将 tool_use/tool_result 降级为文本
- gateway_request: 改进 FilterThinkingBlocksForRetry,禁用顶层 thinking 配置以避免结构约束冲突
- gateway_service: 实现保守的两阶段重试逻辑,优先保留内容,仅在必要时降级工具调用
- 新增 antigravity_gateway_service_test.go 测试签名块剥离逻辑
- 更新相关测试用例以验证降级行为
此修复解决了跨平台/账户切换时历史消息签名失效导致的请求失败问题。
|
2026-01-04 22:32:36 +08:00 |
|
yangjianbo
|
7dddd06583
|
Merge branch 'main' of https://github.com/mt21625457/aicodex2api
|
2026-01-04 21:06:12 +08:00 |
|