Skip to content

invalid_request_error没有触发failover #4903

Closed

Description

@hnyyghk

Client or integration

Codex App

Area

Catalog / models

Summary

invalid_request_error没有触发failover

Reproduction

组合使用alibaba-token-plan/deepseek-v4.1-flash和deepseek/deepseek-flash等模型时,配置为5.6-luna的影子调用拦截模型,发起新对话生成线程标题时,alibaba-token-plan/deepseek-v4.1-flash模型因为不支持response_format,会导致invalid_request_error,但是没有继续failover到deepseek/deepseek-flash等模型执行:
Provider error 400: data: {"error":{"code":"invalid_parameter_error","param":null,"message":"This response_format type is unavailable now","type":"invalid_request_error"},"id":"chatcmpl-946b178a-ce15-4214-9489-2dea20159f0e"}

Image

Version

2.57.0

Operating system

macOS 13.5.1

Provider and model

No response

Logs or error output

Screenshots and supporting files

No response

Redacted configuration

Checks

  • I searched existing issues and documentation.
  • I removed secrets, tokens, account details, request credentials, and personal data.

Activity

  1. added
    account-poolOAuth, credentials, Codex pool, quota, failover, plans
    catalogModel catalog, slugs, visibility, routed entries
    on Sep 17, 2026
  2. lidge-jun commented on Sep 17, 2026

    @lidge-jun
    Owner

    리뷰 · 우선순위 66 / 80

    이 이슈는 Codex App에서 콤보(예: alibaba-token-plan/deepseek-v4.1-flash → deepseek/deepseek-flash)로 새 대화를 열 때, 스레드 제목용 그림자 호출이 response_format을 보내면 Alibaba 게이트웨이가 HTTP 400 invalid_request_error / invalid_parameter_error ("This response_format type is unavailable now")를 내고, 그 다음 콤보 타깃으로 failover하지 않고 멈춘다는 보고다. 재현 OS는 macOS, 보고 버전은 2.57.0이다.

    현재 dev tip은 41f1832 (package 2.58.0)이다. tip #4817은 제로 출력 SSE bare error 이벤트가 comboFailureDecision이 hop이라고 말할 때만 다음 타깃으로 넘긴다. 이 이슈의 핵심은 그 반대다. 결정 함수가 이미 stop을 내리기 때문에 #4817을 올려도 이 400은 다음 타깃으로 가지 않는다.

    src/combos/failover.ts의 comboFailureDecision(약 526행)은 classifyError 결과가 invalid_request_error이면 명시적으로 stop(약 598행)이다. 그 위 isRequestLocalTargetIncompatibility(약 361행)가 일부 400을 hop으로 바꿀 수 있지만, 허용 envelope는 user 파라미터·reasoning.effort unsupported_value·이미지 param:input 정도로 좁고, response_format / "This response_format type is unavailable now" 문구는 없다.

    레지스트리 alibaba-token-plan 쪽은 noJsonSchemaModels에 deepseek-v4.1-flash만 넣어 json_schema를 json_object로 낮추도록 적혀 있다(src/providers/registry/entries-extended.ts, openai-chat passthrough). 제목 생성 경로가 그 가드를 타지 않거나 json_object조차 거절되면 400이 그대로 콤보에 들어온다. 스크린샷의 SSE data error 형태는 #4817 경로와 겹칠 수 있어도, decision=stop이면 체인은 끝난다.

    라인 598 - comboFailureDecision: invalid_request_error → stop. 보고된 response_format 400은 여기에 걸린다
    라인 361 - isRequestLocalTargetIncompatibility: response_format 거절을 hop으로 보지 않음
    경로/심볼 - src/providers/registry/entries-extended.ts noJsonSchemaModels: 그림자 호출이 가드를 안 타면 400 상승
    경로/심볼 - src/server/responses/combo-stream-preflight.ts (#4817): decision=hop일 때만 넘김

    메인테이너의 판단이 필요한 지점

    • response_format 거절을 타깃 로컬 비호환(hop)으로 볼지, 요청 형태 거절(stop)으로 둘지
    • hop이면 다음 타깃이 살아도 같은 response_format을 그대로 보내면 두 번째도 깨질 수 있음
    • 근본 수정이 failover인지, 그림자/제목 호출에서 해당 모델에 response_format을 빼는 가드 관통인지
    • 보고 2.57.0 vs tip 2.58.0+#4817에서 같은 콤보로 재현해 zero-output hop과 stop 분류를 분리할지

    너의 추천
    tip에서 같은 콤보+제목 생성으로 재현한 뒤, (1) 요청에서 response_format을 모델 가드에 맞게 제거/다운그레이드하는 쪽을 우선하고, (2) failover를 손대려면 isRequestLocalTargetIncompatibility에 response_format unavailable envelope를 narrowly 추가할지 별도 PR로 검토한다. #4817만으로는 이 이슈가 닫히지 않는다.

    이 댓글은 grok-bot이 작성했습니다

  3. lidge-jun commented on Sep 17, 2026

    @lidge-jun
    Owner

    Landed via #4927 at 78c71f7 — fix is on dev (combo hops response_format capability refusals to the next target).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    account-poolOAuth, credentials, Codex pool, quota, failover, plansbugSomething isn't workingcatalogModel catalog, slugs, visibility, routed entries

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions