Commit 0cd3abb
fix(byop): MiniMax M3 thinking blocks displayed as reasoning (#198)
* fix(byop): MiniMax M3 <think> blocks now displayed as reasoning (Fixes #197)
근인: MiniMax M3가 스트리밍 중 사고 내용을 /delta/reasoning_content
필드가 아닌 /delta/content 내 <think>...</think> 태그로 전송함.
genai OpenAI 스트리머는 reasoning_content 필드만 ReasoningChunk로
변환하고, content 안 <think> 태그는 일반 Chunk로 흘려보내 UI가
회색 reasoning 블록 대신 <think> 태그가 포함된 일반 텍스트를 출력함.
변경 내용:
- chat_stream.rs: 스트리밍 Chunk arm에 <think>...</think> 상태 머신
추가. 청크 경계에 태그가 걸쳐도 정상 처리(think_active/think_buf
across iterations). <think> 내부 → ReasoningChunk 경로로 라우팅
(회색 reasoning 블록 표시 + note_reasoning_seen latch 설정),
외부 콘텐츠 → 기존 Text 경로 유지.
- reasoning.rs: INTERLEAVED_RULES에 ("minimax-m3", RC) 추가.
M3가 reasoning_content를 반환하는 멀티턴 대화에서 두 번째 턴의
echo 누락으로 인한 400 오류 방지.
수정 파일: 2 / 행수: 66줄 순증가 / 영향면: 1곳(Chunk arm)
https://claude.ai/code/session_0123ysTwn44jVs63dELnqxib
* fix(byop): 리뷰 반영 — <think> 추출 범위를 MiniMax M3로 제한
리뷰 코멘트 대응:
1. [블로킹] <think> 추출이 전체 BYOP 모델에 전역 적용되던 문제 수정:
- reasoning.rs: THINK_TAG_IN_CONTENT_MODELS 상수와
model_uses_think_tags_in_content() 함수 추가
- chat_stream.rs: use_think_extraction 게이트 도입.
Chunk arm을 if/else 브랜치로 분리해 MiniMax M3만 상태머신 활성화,
나머지 모델은 기존 단순 텍스트 emit 경로 유지.
GPT-4o / Qwen 등 일반 모델이 리터럴 <think> 텍스트를 출력해도
reasoning 채널로 잘못 라우팅되는 부작용 제거.
2. [질문] MiniMax M3 멀티턴 echo 포맷 불확실:
- reasoning.rs: INTERLEAVED_RULES에서 ("minimax-m3", RC) 항목 제거.
M3의 다음턴 assistant message echo 포맷(RC 필드 vs <think>-in-content)이
확인되지 않아 잘못된 RC 설정을 남기지 않도록 제거.
에코 수정은 포맷 확인 후 별도 PR로 처리.
- chat_stream.rs: <think> 추출 arm에서 note_reasoning_seen() 제거.
RC echo 라치를 잘못 설정하지 않도록 방지.
3. [비블로킹] <think> 태그 문자열 자체가 chunk 경계에서 절단되는 known limitation 주석 추가.
4. reasoning.rs에 model_uses_think_tags_in_content 단위 테스트 추가.
https://claude.ai/code/session_0123ysTwn44jVs63dELnqxib
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 940c158 commit 0cd3abb
2 files changed
Lines changed: 132 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3203 | 3203 | | |
3204 | 3204 | | |
3205 | 3205 | | |
| 3206 | + | |
| 3207 | + | |
| 3208 | + | |
3206 | 3209 | | |
3207 | 3210 | | |
3208 | 3211 | | |
| |||
3545 | 3548 | | |
3546 | 3549 | | |
3547 | 3550 | | |
| 3551 | + | |
| 3552 | + | |
| 3553 | + | |
| 3554 | + | |
3548 | 3555 | | |
3549 | 3556 | | |
3550 | 3557 | | |
| |||
3629 | 3636 | | |
3630 | 3637 | | |
3631 | 3638 | | |
3632 | | - | |
3633 | | - | |
| 3639 | + | |
| 3640 | + | |
| 3641 | + | |
| 3642 | + | |
| 3643 | + | |
| 3644 | + | |
| 3645 | + | |
| 3646 | + | |
| 3647 | + | |
| 3648 | + | |
| 3649 | + | |
| 3650 | + | |
| 3651 | + | |
| 3652 | + | |
| 3653 | + | |
| 3654 | + | |
| 3655 | + | |
| 3656 | + | |
| 3657 | + | |
| 3658 | + | |
| 3659 | + | |
| 3660 | + | |
| 3661 | + | |
| 3662 | + | |
| 3663 | + | |
| 3664 | + | |
| 3665 | + | |
| 3666 | + | |
| 3667 | + | |
| 3668 | + | |
| 3669 | + | |
| 3670 | + | |
| 3671 | + | |
| 3672 | + | |
| 3673 | + | |
| 3674 | + | |
| 3675 | + | |
| 3676 | + | |
| 3677 | + | |
| 3678 | + | |
| 3679 | + | |
| 3680 | + | |
| 3681 | + | |
| 3682 | + | |
| 3683 | + | |
| 3684 | + | |
| 3685 | + | |
| 3686 | + | |
| 3687 | + | |
| 3688 | + | |
| 3689 | + | |
| 3690 | + | |
| 3691 | + | |
| 3692 | + | |
| 3693 | + | |
| 3694 | + | |
| 3695 | + | |
| 3696 | + | |
| 3697 | + | |
| 3698 | + | |
| 3699 | + | |
| 3700 | + | |
| 3701 | + | |
| 3702 | + | |
| 3703 | + | |
| 3704 | + | |
| 3705 | + | |
| 3706 | + | |
| 3707 | + | |
| 3708 | + | |
| 3709 | + | |
| 3710 | + | |
| 3711 | + | |
3634 | 3712 | | |
3635 | | - | |
3636 | | - | |
3637 | | - | |
3638 | | - | |
3639 | | - | |
| 3713 | + | |
| 3714 | + | |
| 3715 | + | |
| 3716 | + | |
| 3717 | + | |
| 3718 | + | |
| 3719 | + | |
| 3720 | + | |
| 3721 | + | |
3640 | 3722 | | |
3641 | 3723 | | |
3642 | 3724 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
250 | 250 | | |
251 | 251 | | |
252 | 252 | | |
253 | | - | |
| 253 | + | |
254 | 254 | | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
255 | 258 | | |
256 | 259 | | |
257 | 260 | | |
| |||
268 | 271 | | |
269 | 272 | | |
270 | 273 | | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
271 | 295 | | |
272 | 296 | | |
273 | 297 | | |
| |||
821 | 845 | | |
822 | 846 | | |
823 | 847 | | |
| 848 | + | |
| 849 | + | |
| 850 | + | |
| 851 | + | |
| 852 | + | |
| 853 | + | |
| 854 | + | |
| 855 | + | |
| 856 | + | |
| 857 | + | |
| 858 | + | |
| 859 | + | |
| 860 | + | |
| 861 | + | |
| 862 | + | |
| 863 | + | |
| 864 | + | |
| 865 | + | |
824 | 866 | | |
0 commit comments