본문으로 건너뛰기
CoderRed Blog

Article

Ox Alpha 오류를 고쳐 OMP에 처음으로 기여했습니다

며칠 전 OpenRouter의 Ox Alpha를 OMP에 붙여 실제 작업을 돌린 후기를 썼습니다. 글을 올린 뒤에도 Ox Alpha를 계속 사용했어요.

그런데 OpenRouter에서 하루 동안 기다려야 하는 레이트 리밋이 걸렸습니다. 하루를 그냥 기다리기는 싫어서 같은 Ox Alpha를 쓸 수 있는 OpenCode Zen으로 옮겼어요.

OMP에서 가장 높은 싱킹 설정은 xhigh였습니다. OpenRouter에서 쓰던 것처럼 가장 높은 값을 골랐는데, 요청을 보내자 바로 오류가 나왔습니다.

[1210] This model always engages in thinking and cannot be disabled;
please use low, high, or max

오류 메시지는 low, high, max 중 하나를 쓰라고 했습니다. 그런데 OMP의 선택지에는 max가 없었어요.

“이건 내가 잘못 고른 문제가 아니라, OMP가 이 모델의 선택지를 잘못 보여주는 거구나.”

코드를 확인하고 직접 고친 뒤 풀 리퀘스트를 보내기로 했습니다.

먼저 흐름만 정리하면

  1. OpenRouter에서 하루짜리 레이트 리밋이 걸려 OpenCode Zen으로 옮겼습니다.
  2. OMP의 최고 싱킹 설정인 xhigh를 골랐지만 OpenCode Zen은 low, high, max만 받았습니다.
  3. OpenCode Zen의 Ox Alpha가 다른 모델 ID로 등록돼 기존 보정 코드를 지나치고 있었습니다.
  4. 별칭 모델도 찾도록 수정하고 회귀 테스트를 추가해 풀 리퀘스트 #9435를 보낸 뒤, 수정한 OMP 소스로 OpenCode Zen을 계속 사용했습니다.
  5. 제한이 풀린 OpenRouter를 다시 써 봤지만 응답이 계속 끊겼습니다. 수정이 v18.0.4에 정식 반영된 뒤에는 OpenCode Zen으로 돌아왔습니다.

OpenRouter 레이트 리밋을 피해 OpenCode Zen으로 옮겼습니다

이전 글에서는 OpenRouter의 stealth/ox-alpha를 OMP에 연결했습니다. 무료 모델이라 실제 runNburn 저장소에서 여러 차례 작업을 맡겼고, 코드 작성과 도구 사용도 꽤 괜찮았어요.

계속 사용하다 보니 OpenRouter에서 하루 동안 풀리지 않는 레이트 리밋을 만났습니다. Ox Alpha를 더 써 보고 싶어서 OpenCode Zen의 무료 경로로 바꿨습니다.

모델 제공 경로만 달라졌으니 OMP에서도 비슷하게 작동할 거라고 생각했어요. 실제 문제는 모델이 아니라 싱킹 설정 이름에서 나왔습니다.

xhigh를 골랐더니 max를 쓰라고 했습니다

OMP가 일반적인 추론 모델에 보여주던 단계는 아래와 같았습니다.

OMP에 보이던 단계OpenCode Zen이 받는 단계
minimal지원하지 않음
lowlow
medium지원하지 않음
highhigh
xhigh지원하지 않음
없음max

저는 가장 높은 단계가 필요해서 xhigh를 골랐습니다. 하지만 OpenCode Zen은 이 값을 지원하지 않았어요. 오류 메시지가 말한 최고 단계는 max였고, 정작 OMP 화면에는 그 선택지가 없었습니다.

싱킹을 끄는 것도 답이 아니었습니다. 이 모델은 항상 싱킹을 사용하고, 요청마다 지원하는 단계를 하나 지정해야 했습니다.

같은 Ox Alpha인데 모델 ID가 달랐습니다

OMP에는 OpenCode 경로의 Ox Alpha를 low, high, max로 맞추는 코드가 이미 있었습니다. 그런데 그 코드는 모델 ID에 ox-alpha가 들어 있을 때만 작동했어요.

모델 ID만 보면 Ox Alpha인지 알 수 없습니다. OpenCode Zen에서 쓴 ID는 x-preview-f-free였고, 표시 이름에는 Ox Alpha Free (Unlimited)가 그대로 들어 있었습니다.

원인은 같은 모델이 별칭 ID로 등록돼 기존 보정 코드를 그대로 지나친 것이었습니다.

수정 방향은 단순했습니다.

  • OpenCode Go와 OpenCode Zen에서만 적용합니다.
  • 모델 ID에 ox-alpha가 있으면 기존처럼 처리합니다.
  • 별칭 ID라면 표시 이름의 Ox Alpha를 확인합니다.
  • 다른 제공자가 운영하는 Ox Alpha에는 각 제공자의 설정을 그대로 둡니다.

수정 뒤 OMP가 보여주는 선택지는 low, high, max로 바뀌었습니다. 싱킹이 필수라는 정보도 함께 적용했습니다.

재현한 오류를 테스트로 남겼습니다

코드만 바꾸면 나중에 모델 목록이 갱신될 때 같은 문제가 돌아올 수 있습니다. 그래서 실제로 겪은 조건을 회귀 테스트에 넣었습니다.

테스트에서는 x-preview-f-free라는 별칭 ID와 Ox Alpha Free (Unlimited)라는 표시 이름을 사용했습니다. 수정 뒤에는 max를 그대로 선택할 수 있고, 잘못된 xhigh가 들어오면 지원하는 high로 정리되는지 확인했습니다.

다른 모델 이름까지 Ox Alpha로 오인하지 않는지도 확인했습니다. 회귀 테스트에서는 경계 조건을 확인하려고 Ox Alphabet이라는 이름을 임의로 만들었어요. Ox Alpha 뒤의 경계를 검사하지 않으면 이 이름까지 잡히기 때문에, 기존 싱킹 단계를 유지하는지 확인했습니다.

풀 리퀘스트를 올리고 리뷰를 다시 반영했습니다

수정과 테스트를 마친 뒤 OMP 저장소에 풀 리퀘스트 #9435를 올렸습니다.

첫 리뷰에서 두 가지를 더 고쳤습니다. 생성된 모델 목록을 직접 검사하던 테스트는 모델 데이터가 바뀔 때 쉽게 깨질 수 있어 제거했습니다. 표시 이름을 찾는 조건에는 끝 경계가 부족해 테스트용 Ox Alphabet까지 잡을 수 있었고, 경계를 추가한 뒤 반대 사례 테스트도 넣었습니다.

모델 목록을 다시 만들 때는 로컬의 제공자 자격 증명이 결과에 섞인 문제도 찾았습니다. 지속적 통합 환경처럼 자격 증명이 없는 상태에서 다시 생성하자 계정별로 발견된 모델은 빠지고 저장소에 정의된 모델만 남았습니다.

수정 뒤 카탈로그 테스트 679개가 모두 통과했고 타입 검사도 끝났습니다. 마지막 자동 리뷰에서는 주요 문제가 발견되지 않았습니다.

OMP v18.0.4 반영 뒤 다시 OpenCode Zen으로 돌아왔습니다

풀 리퀘스트를 보낸 뒤에는 제가 수정한 OMP 소스로 OpenCode Zen을 계속 썼습니다. low, high, max를 제대로 선택할 수 있었고 처음 만났던 오류도 사라졌어요.

그러는 동안 OpenRouter의 레이트 리밋이 풀렸습니다. stealth/ox-alpha로 돌아가 실제 작업을 이어 봤어요. 그런데 응답이 계속 끊겼습니다. 작업 흐름을 유지할 수 없어 결국 포기했습니다.

Ox Alpha 자체의 작업 품질은 여전히 마음에 들었습니다. 문제는 OpenRouter 경로였어요. 하루짜리 제한에 이어 연결도 불안정했습니다. 실사용 체감은 최악이었고 솔직히 실망스러웠습니다.

이후 풀 리퀘스트가 2026년 8월 24일 OMP 메인 브랜치에 병합됐습니다. 같은 날 나온 v18.0.4 변경 기록에는 OpenCode Zen의 Ox Alpha가 올바른 싱킹 단계를 쓰도록 고쳤다는 내용이 들어갔어요.

그리고 새 기여자 목록에 이런 문장이 추가됐습니다.

@coderredlab made their first contribution in #9435

OMP v18.0.4 새 기여자 목록에 coderredlab과 풀 리퀘스트 9435가 표시된 GitHub 릴리스 화면
OMP v18.0.4 새 기여자 목록
OMP v18.0.4 변경 기록에 제가 OMP에 처음으로 기여한 풀 리퀘스트 #9435가 공식적으로 기록됐습니다.

수정이 정식 버전에 들어갔으니 이제 로컬에서 고친 소스를 따로 유지할 필요도 없어졌습니다. OMP를 v18.0.4로 올리고 다시 OpenCode Zen의 Ox Alpha를 쓰고 있어요.

제가 OMP에 처음으로 기여한 수정이었습니다. 아래 기여자 목록에는 CoderRed의 빨간색 CR_ 프로필도 함께 표시됐습니다.

“야, 나 OMP 컨트리뷰터 됐네.”

평소 쓰던 도구에서 오류 하나를 만났고, 메시지에 적힌 세 단어를 따라가다 저장소 코드까지 고치게 됐습니다. 시작은 xhigh가 왜 거부되는지 확인한 일이었어요.

정리하면

OpenCode Zen에서 max가 보이지 않았던 이유는 Ox Alpha가 x-preview-f-free라는 별칭 ID로 등록돼 있었기 때문입니다. 표시 이름까지 확인하도록 고쳤고, 회귀 테스트와 리뷰 반영을 거쳐 OMP v18.0.4에 들어갔습니다.

제가 실제로 막힌 오류 하나를 고치면서 OMP에 처음으로 기여하게 됐습니다. 지금은 정식 버전에서 다시 OpenCode Zen의 Ox Alpha를 쓰고 있습니다.

참고 자료

댓글