[M3 Bug] Token Plan + Cloudflare AI Gateway (BYOK) does not forward SSE — chunks are buffered and returned as a single payload
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- python, shell, typescript
- Área
- api, cloud, networking
Línea de trabajo
Comienza ejecutando las dos solicitudes curl del issue y compara la salida directa de MiniMax Token Plan con la ruta BYOK de Cloudflare AI Gateway. Verifica los encabezados de respuesta y si cada evento SSE llega de forma incremental; se considera terminado cuando el gateway reenvía fragmentos text/event-stream sin almacenar en búfer la respuesta completa.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Which inference path did you use?
MiniMax API (Token Plan, via Cloudflare AI Gateway / BYOK)
Inference parameters
- model: MiniMax-M3
- stream: true
- max_tokens: default
- temperature: default
- request path:
POST https://<gateway>.gateway.ai.cloudflare.com/v1/chat/completions(Cloudflare AI Gateway) - upstream:
api.minimaxi.com(大陆版 Token Plan) — configured via BYOK (Bring Your Own Key) - client: raw
curl -N(also reproduced from@langchain/openaiTS /openai-pythonSDK)
Prompt / input
# A. Via Cloudflare AI Gateway (BYOK) ← 问题路径
curl -N -X POST "https://<gateway>.gateway.ai.cloudflare.com/v1/chat/completions" \
-H "Authorization: Bearer $CF_AIGW_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-M3",
"stream": true,
"messages": [{"role": "user", "content": "Count from 1 to 10 slowly"}]
}'
# B. Direct to api.minimaxi.com (Token Plan) ← 对照,正常
curl -N -X POST "https://api.minimaxi.com/v1/chat/completions" \
-H "Authorization: Bearer $MINIMAX_TOKEN_PLAN_KEY" \
-H "Content-Type: application/json" \
-d '{ ... 同上 ... }'
Expected behavior
Cloudflare AI Gateway 在 BYOK + stream: true 时应该透明转发上游 SSE:
- 响应
Content-Type: text/event-stream+Transfer-Encoding: chunked - 上游每个
data: {...}\n\n增量到客户端 - TTFB ≈ TTFT(几百 ms),不是"等生成完再一次性返回"
A / B 两条路径的流式体验应完全一致。
Actual behavior
SSE 没有被 CF 透传。观察:
- B(直连
api.minimaxi.com):正常流式,chunks 一个个到,前端可以增量渲染 ✅ - A(CF AI Gateway BYOK):chunks 全部存在且顺序正确,但挤在一起一次性返回 ⛔
- 客户端在 curl / OpenAI SDK /
@langchain/openai上都看不到 chunk-by-chunk 到达 - 整段
data: {...}\n\n行连成一片在生成结束后才一次性 flush - 没有"逐字打出"的效果,TTFB 接近"整个 response 生成完成"的耗时
- 任何依赖 incremental render 的客户端(OpenAI SDK stream iterator、LCEL streaming、
assistant-ui、自定义 SSE consumer)都不可用
- 客户端在 curl / OpenAI SDK /
Additional context
- 根因方向:CF AI Gateway edge 在 BYOK 模式下对上游
text/event-stream响应做了 buffering(典型表现:buffer 到 size threshold 或 end-of-stream 才 flush),没有透传给下游。属于 CF 侧行为,但提在这里因为:- 用 MiniMax Token Plan 作为 upstream 可稳定复现
- MiniMax 端加
X-Accel-Buffering: no等 header 可能绕过 - 走 CF 转发 Token Plan 的其他用户也会撞到同样的问题
- 与模型无关:
MiniMax-M2.7和MiniMax-M3在 Token Plan + CF BYOK 路径下表现一致 - 还没测过 Anthropic-compatible 端点经 CF BYOK 是否同样问题
- 直连 Token Plan 一切正常,问题专属于 CF AI Gateway BYOK 这一跳
Suggested mitigations
MiniMax(上游)侧可考虑:
- streaming 响应加
X-Accel-Buffering: noheader - 确保
Content-Type: text/event-stream在第一个 byte 就 set,而不是 buffering 完成后才设 - 文档里给出推荐的 CF AI Gateway / 反代层流式配置说明
Cloudflare(gateway)侧可考虑:
- 上游是
text/event-stream时跳过 response buffering - 允许把 BYOK upstream 标记为 "streaming-required",让 edge 不要 buffer
- Lenguaje dominante
- Sin datos de lenguaje
- Estrellas
- 487
- Forks
- 59
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de MiniMax-AI/MiniMax-M3
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
MiniMax-AI/MiniMax-M3#34 · 1 reacción ·
-
[M2.7 Bug] Abiertobug
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
MiniMax-AI/MiniMax-M3#35 ·
-
enhancement
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
MiniMax-AI/MiniMax-M3#33 ·
-
Verify evals on Papers with Code Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 48/100
MiniMax-AI/MiniMax-M3#32 ·
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 42/100
MiniMax-AI/MiniMax-M3#31 ·
Todos los issues de MiniMax-AI/MiniMax-M3
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
external-issue to-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
googleapis/google-cloud-swift#1151 ·
-
SqliteSaver.list(filter=...) silently misses nested metadata values containing non-ASCII text Abiertoexternal
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
langchain-ai/langgraph#9074 · 1 comentario ·
-
documentation specification
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
openai/openai-openapi#584 ·