Three layered optimizations targeting Gemini-style 5MB base64 payloads where
RSS could balloon to tens of GB under concurrent load:
1. Byte-based param override (relay/common/override.go)
- Switch legacy/operations hot paths from common.Marshal round-trips and
map[string]any conversions to gjson/sjson on []byte directly.
- Avoids cloning 5MB strings during each Set/Delete operation.
2. strings.Builder for Gemini response markdown (relay/channel/gemini/relay-gemini.go)
- Replace string concatenation + strings.Join when assembling
"" content for inline image responses.
- Pre-allocates capacity from inline_data byte sizes.
3. Outbound BodyStorage + streaming Decoder (this commit's core)
- New relay/common/outbound_body.go helper wraps marshaled upstream bodies
in common.BodyStorage, allowing disk-cache mode to offload jsonData to
a temp file while waiting for upstream TTFB. The original []byte can
then be GC'd, removing ~5MB/req of heap residency during the longest
window of a request.
- All 7 relay handlers (gemini/claude/responses/embedding/image/compatible/
rerank) plus chat_completions_via_responses adopt the helper with
defer closer.Close() and explicit jsonData = nil.
- relay/common/relay_info.go: new UpstreamRequestBodySize so
relay/channel/api_request.go can populate req.ContentLength (lost when
body becomes a type-erased io.Reader).
- common/gin.go UnmarshalBodyReusable: when storage is disk-backed and
content-type is JSON, decode via DecodeJson(storage) instead of
storage.Bytes()+Unmarshal, removing one transient 5MB copy per request.
memory mode and form/multipart paths unchanged.
| Name |
Last commit
|
Last Update |
|---|---|---|
| .. | ||
| ai360 | Loading commit data... | |
| ali | Loading commit data... | |
| aws | Loading commit data... | |
| baidu | Loading commit data... | |
| baidu_v2 | Loading commit data... | |
| claude | Loading commit data... | |
| cloudflare | Loading commit data... | |
| codex | Loading commit data... | |
| cohere | Loading commit data... | |
| coze | Loading commit data... | |
| deepseek | Loading commit data... | |
| dify | Loading commit data... | |
| gemini | Loading commit data... | |
| jimeng | Loading commit data... | |
| jina | Loading commit data... | |
| lingyiwanwu | Loading commit data... | |
| minimax | Loading commit data... | |
| mistral | Loading commit data... | |
| mokaai | Loading commit data... | |
| moonshot | Loading commit data... | |
| ollama | Loading commit data... | |
| openai | Loading commit data... | |
| openrouter | Loading commit data... | |
| palm | Loading commit data... | |
| perplexity | Loading commit data... | |
| replicate | Loading commit data... | |
| siliconflow | Loading commit data... | |
| submodel | Loading commit data... | |
| task | Loading commit data... | |
| tencent | Loading commit data... | |
| vertex | Loading commit data... | |
| volcengine | Loading commit data... | |
| xai | Loading commit data... | |
| xinference | Loading commit data... | |
| xunfei | Loading commit data... | |
| zhipu | Loading commit data... | |
| zhipu_4v | Loading commit data... | |
| adapter.go | Loading commit data... | |
| api_request.go | Loading commit data... | |
| api_request_test.go | Loading commit data... |