Skip to content

Grok Composer 2.5 routes can return stale unrelated session output instead of current prompt #3750

Description

@derekszen

Summary

grok-composer-2.5-fast is exposed through the Grok Build provider and accepts requests, but OpenAI-compatible routed calls can return stale/unrelated prior-session output instead of answering the current prompt.

This appears to be distinct from image-input issue #3746. Native Grok Build headless mode can answer the same Composer model correctly, so the failure looks specific to the CLIProxyAPI Grok Build routing/session/parsing path rather than the upstream xAI harness itself.

Environment

Native control passes

Native Grok Build headless Composer call returns the exact marker:

grok -p 'Reply exactly: NATIVE_COMPOSER_260607_SMOKE' \
  -m grok-composer-2.5-fast \
  --output-format plain \
  --no-subagents \
  --disable-web-search

Observed:

NATIVE_COMPOSER_260607_SMOKE

Router reproduction

/v1/models advertises these Composer routes:

grok-composer-2.5-fast
grok-default/grok-composer-2.5-fast
grok-green/grok-composer-2.5-fast
grok-yellow/grok-composer-2.5-fast

Example request:

curl -sS http://127.0.0.1:8317/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model":"grok-default/grok-composer-2.5-fast",
    "messages":[{"role":"user","content":"Reply exactly: ROUTER_CHAT_default_260607"}],
    "max_tokens":20,
    "temperature":0
  }'

Expected:

ROUTER_CHAT_default_260607

Observed examples across the three profiles and both Chat Completions/Responses:

  • grok-default/grok-composer-2.5-fast sometimes returns unrelated prior-work text, e.g. Reading the configuration file to locate the Gemini section and thread-count settings.
  • grok-green/grok-composer-2.5-fast returned unrelated Web Search tool calls for UCLA residence-hall queries.
  • grok-yellow/grok-composer-2.5-fast returned a long unrelated prior transcript about a network routing optimizer and repeated the marker many times.
  • /v1/responses also returned unrelated previous task content, e.g. reasoning about 1+1=? or local network-interface setup, before eventually mentioning the marker.

The regular Grok Build route works on the same router:

curl -sS http://127.0.0.1:8317/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model":"grok-default/grok-build-0.1",
    "messages":[{"role":"user","content":"Reply exactly: ROUTER_BUILD_260607_SMOKE"}],
    "max_tokens":20,
    "temperature":0
  }'

Observed:

ROUTER_BUILD_260607_SMOKE

Probable root cause

It looks like the Grok Composer route is not isolated per API request, or CLIProxyAPI is parsing/replaying an existing Grok Build session/transcript instead of returning only the current response. The strongest clue is that stale outputs include unrelated previous prompts, tool calls, and repeated old markers, while native grok -p -m grok-composer-2.5-fast answers the exact-marker prompt correctly.

Impact

Composer 2.5 appears available in /v1/models, but external OpenAI-compatible clients cannot rely on it because they may receive stale content from another session/request.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions