chaos
|
b6fc113cdb
|
perf: 多维度性能优化 (审计24项, 实施7项)
优化内容:
1. [HIGH] _maybe_trim_context 快速跳过: body<100KB 直接返回, 省去 json.loads+token估算
- 99% 的小请求从 ~0.01ms 降到 0ms (零开销)
2. [HIGH] token估算用预编译正则替代逐字符扫描
- 190K字符: 9.2ms → 6.0ms (35% faster)
3. [HIGH] 移除调试dump代码: >200KB请求同步写文件是热路径阻塞I/O
4. [HIGH] 提取公共函数: _dynamic_timeout() + _build_upstream_headers() + _upstream_request_with_retry()
- proxy()和anthropic_messages()的401/429/504重试+超时+header逻辑去重 (-131行)
5. [MEDIUM] cache.get() 无锁快速路径: 先无锁检查token+expiry, 仅过期时加锁
6. [MEDIUM] SSE buffer用list+join替代字符串拼接: 5x faster, 避免O(n²)风险
7. [MEDIUM] 连接池扩大到96 (threads*1.5): 避免retry并发耗尽
基准测试: _maybe_trim_context(大请求) 110ms→71ms (36% faster)
功能测试: 全部通过
|
2026-07-22 15:35:57 +08:00 |
|
chaos
|
61bda8db75
|
feat: 添加 Anthropic /v1/messages 接口适配层
- anthropic_request_to_openai(): Anthropic 请求转 OpenAI 格式
- system 提取到 messages 首条
- content blocks 展开 (text/tool_use/tool_result)
- tools 格式转换 (input_schema → parameters)
- max_tokens/temperature/stop_sequences 等参数映射
- openai_response_to_anthropic(): OpenAI 响应转 Anthropic 格式
- content 数组构建 (text/tool_use)
- stop_reason 映射 (stop→end_turn, tool_calls→tool_use, length→max_tokens)
- usage 字段映射 (input_tokens/output_tokens)
- openai_stream_to_anthropic_stream(): 流式 SSE 转换生成器
- message_start/content_block_start/content_block_delta/content_block_stop
- message_delta/message_stop 事件序列
- 支持 text_delta 和 input_json_delta
- 正确的 block index 分配
- /v1/messages 路由: 复用现有 token 获取/超时/重试逻辑
- 非流式: 请求转换→上游转发→响应转换
- 流式: 请求转换→上游流式转发→SSE 事件转换
测试通过: 非流式/流式文本、system prompt、tool_use、tool_result 多轮对话
|
2026-07-22 14:35:39 +08:00 |
|
chaos
|
b98010591e
|
feat: 添加自动上下文截断功能 (基于 LiteLLM trim_messages 方案)
- 新增 token 估算函数 (_estimate_tokens, _estimate_messages_tokens)
- 新增滑动窗口截断 (_trim_messages): 保留 system/tool 消息, 从最旧对话消息开始丢弃
- 新增单条消息中间截断 (_shorten_message_content): 保留头尾, 迭代逼近目标 token 数
- 新增 _maybe_trim_context: 集成到代理逻辑, 请求体超限时自动截断
- 截断目标: 上游 192K token 限制的 73.5% (~141K), 留出响应空间
- 测试验证: 202K token 请求自动截断至 125K, 上游返回 200
|
2026-07-22 10:26:35 +08:00 |
|
chaos
|
dcf9b33fe9
|
feat: 添加 glm-5.2 模型到可用模型列表
|
2026-07-22 09:00:29 +08:00 |
|
chaos
|
bdec3a6cb0
|
refactor(ai): 优化华为网关连接池配置与 Token 缓存查找逻辑
|
2026-07-08 17:24:31 +08:00 |
|
chaos
|
af92152524
|
refactor(ai): 重构华为网关并修复长文本对话压缩逻辑
|
2026-07-08 17:14:07 +08:00 |
|
chaos
|
34eb36623c
|
fix: auto_compact压缩后用摘要+用户问题重新请求模型,而非直接返回摘要
|
2026-07-08 17:00:42 +08:00 |
|
chaos
|
0ffbf20f6b
|
fix: compact内部401刷新Token重试+清空黑名单防锁死
|
2026-07-08 16:51:33 +08:00 |
|
chaos
|
2b073f2e3f
|
fix: content=None 导致 TypeError + /v1/models 本地返回
|
2026-07-08 16:27:35 +08:00 |
|
chaos
|
29d6fac6cc
|
fix: 401 黑名单锁死 - 新Token也401时清空黑名单避免27分钟不可用
|
2026-07-08 15:50:57 +08:00 |
|
chaos
|
5899032aee
|
fix: compact 504 超时修复
- 降低 auto_compact 阈值: 1.2MB → 350KB (426KB 请求也会导致上游 504)
- 预截断: compact 前每条消息限制 500 字, 大幅减少 token 数
- 降低批次大小: 800KB → 350KB 每批
- 429 限流自动重试: 最多 2 次, 递增等待 (5s, 10s)
- 504 超时自动重试: 1 次, 降级为 auto_compact
- compact 内部 429/504 重试: 最多 3 次
- 全局请求日志: before_request 捕获所有请求
|
2026-07-08 15:12:29 +08:00 |
|
chaos
|
368ffbe66c
|
fix: 透明分批压缩 - /v1路由 + 超限自动compact无需客户端感知
关键改动:
1. /v1/<path> 路由: 与 /v2 相同代理逻辑,兼容标准OpenAI客户端
2. auto_compact(): chat/completions超限时自动分批压缩,返回标准OpenAI格式
- 客户端完全无感知,不需要调用特殊端点
- 支持stream=true(SSE)和stream=false
- X-Auto-Compact响应头标识自动压缩发生
3. 非chat/completions超限仍返回413清晰错误
4. 修复compact SSE与Waitress的direct_passthrough兼容问题
|
2026-07-08 14:21:38 +08:00 |
|
chaos
|
85ea33eb4e
|
fix: 解决 compact 命令断连问题 - 请求体超限413清晰错误 + /v2/compact分批压缩端点
根因: APIG请求体限制~1.25MB, 超限后JSON截断导致'model id缺失'400错误→客户端断连
修复:
1. 请求体超限校验: 返回413 + content_too_large清晰错误(而非上游的'model id缺失')
2. /v2/compact端点: 超长对话自动分批发送压缩,每批<800KB,最后合并总结
3. 动态超时: 根据请求体大小自动调整(60s→180s→300s)
4. 修复响应头转发: 剥离Content-Encoding避免客户端解压失败
5. 禁用flask-compress(与Waitress SSE兼容问题)
|
2026-07-08 14:06:21 +08:00 |
|
chaos
|
a2a96282de
|
feat: 启用响应压缩(gzip/brotli/zstd) + 优化SSE流式chunk_size
- 添加 flask-compress 中间件,长文本响应自动压缩(压缩率70-80%)
- 压缩阈值设为256字节,小响应不压缩
- SSE流式 chunk_size 从 4096 提升到 16384,减少分片开销
- 压缩白名单包含 text/event-stream,SSE也支持压缩
- 解决长文本响应体积过大导致超时/内存溢出的问题
|
2026-07-08 13:21:32 +08:00 |
|
chaos
|
fab2a25bcc
|
feat: 上游错误日志 + ModelArts错误→OpenAI格式转换
- 非200响应记录WARNING日志(含响应体前500字节)
- 华为云ModelArts错误格式(error_code/error_msg)转为OpenAI标准格式
- 解决客户端'压缩上下文'报错时错误格式不兼容问题
- 根因: prompt超196608 tokens触发ModelArts.81001
|
2026-07-02 17:23:34 +08:00 |
|
chaos
|
e9c635dbd0
|
feat: 网关全面优化 - SSE流式转发/连接池/Token优先级/持久化
- 移除JWT格式过滤(token.count('.')>=2),改为len>200
- HUAWEI_TOKEN环境变量设为最高优先级
- Token持久化到/etc/huawei-gateway.env,重启自动恢复
- SSE流式转发(stream=True + iter_content)
- requests.Session连接池(20连接, 3次重试)
- Waitress线程数16→32
- 过滤hop-by-hop头(Connection/Keep-Alive/Upgrade)
- pip安装增加waitress依赖
- 新增独立huawei_gateway.py文件
|
2026-07-02 16:23:22 +08:00 |
|