5.8 KiB
5.8 KiB
Milestone: OpenAI-compatible Think 제어 MVP
위치
- Roadmap: ROADMAP.md
- Phase: PHASE.md
목표
OpenAI-compatible Chat Completions 요청에서 thinking/reasoning 생성을 요청별로 켜고 끌 수 있게 한다. provider runtime은 reasoning-capable 상태로 유지하되, Edge가 공개 요청 필드를 검증하고 Node provider adapter가 vLLM, vLLM-MLX, Lemonade의 지원 필드로 매핑한다. 호출자가 reasoning 생성을 끄거나 reasoning 응답 노출만 숨길 수 있어야 하며, 지원하지 않는 조합은 조용히 무시하지 않고 명확한 compatibility error 또는 정의된 fallback으로 처리한다.
상태
[완료]
승격 조건
- 없음
구현 잠금
- 상태: 해제
- SDD: 필요
- SDD 문서: 없음 (작성 전)
- SDD 사유: OpenAI-compatible request schema, provider option 매핑, streaming response 노출 정책이 바뀌는 API 계약 Milestone이다.
- 잠금 해제 조건:
- SDD 잠금이 해제되어 있다.
- SDD 사용자 리뷰가 없거나 승인/해결되었다.
- Acceptance Scenario가 Milestone 기능 Task와 연결되어 있다.
- Evidence Map이 완료 시
Roadmap Completion과 최종 검증 evidence로 검증 가능하게 연결되어 있다.
- 결정 필요: 없음
범위
/v1/chat/completions요청의 thinking/reasoning 제어 field 수신, 검증, 내부 run input 전달think,reasoning_effort,thinking_token_budget,include_reasoning의 의미와 충돌 정책- raw
chat_template_kwargs는 공개 request field로 직접 열지 않고, Edge/Node가 provider별 내부 option으로 생성하는 매핑 정책 - vLLM Qwen3, vLLM-MLX Qwen3, Lemonade provider의 reasoning-capable runtime에 대한 요청별 option 매핑
- streaming/non-streaming 응답의
reasoning_content노출/억제 정책 - OpenAI-compatible 계약 문서, edge/node 단위 테스트, dev-runtime smoke
기능
Epic: [think-control] Request-Level Think Control
OpenAI-compatible 호출자가 요청 단위로 thinking/reasoning 생성과 노출을 제어하는 capability를 묶는다.
- [request-contract]
/v1/chat/completions가think,reasoning_effort,thinking_token_budget,include_reasoning을 허용하고 타입, 범위, 충돌 조합을 검증한다. 검증: 알 수 없는 provider 전용 wrapper는 계속 400으로 거부되고, 허용 필드는 Edge request decoder와 계약 테스트를 통과한다. - [provider-mapping] Edge run input과 Node
openai_compatadapter가 요청별 think 설정을 provider별 top-level field 또는 내부chat_template_kwargs.enable_thinking으로 매핑한다. 검증: vLLM Qwen3, vLLM-MLX, Lemonade mock이 같은 요청 플래그에 대해 기대 request body를 받는다. - [reasoning-visibility]
include_reasoning=false가 provider reasoning 생성 여부와 별개로 OpenAI-compatible 응답의reasoning_content노출을 억제한다. 검증: stream과 non-stream 응답 모두 reasoning delta/message field가 빠지고 content/tool output은 유지된다. - [default-compat] think 관련 필드가 생략된 기존 요청은 현재 provider 기본 thinking 동작을 유지한다. 검증: 기존 chat completion, tool calling, provider pool 테스트가 회귀 없이 통과한다.
- [dev-smoke] dev-runtime 세 provider(mac vLLM-MLX, GX10 vLLM, OneXPlayer Lemonade)에서
think=false, 기본값,include_reasoning=falsesmoke가 통과한다. 검증: provider raw trace와 Edge OpenAI-compatible SSE를 비교해 reasoning 생성/노출 상태가 기대와 일치한다. - [contract-docs] OpenAI-compatible 계약 문서와 dev 운영 문서가 요청별 thinking/reasoning 제어 field, provider별 unsupported 정책, 기본값을 설명한다.
완료 리뷰
- 상태: 통과
- 요청일: 2026-07-04
- 완료 근거:
agent-task/archive/2026/07/m-openai-compatible-think-control/**/complete.log5개가 모든 기능 Task의Roadmap CompletionPASS를 기록했고, 종료 전 코드레벨 감사에서 provider-first OpenAI-compatible provider label 기본값과 README 계약 문구 드리프트를 보정했다. - 검토 항목:
go test -count=1 ./apps/edge/internal/node ./apps/edge/internal/openai ./apps/node/internal/adapters/openai_compat,go test -count=1 ./apps/edge/internal/bootstrap ./apps/edge/internal/configrefresh ./packages/go/config,go test ./...통과. 남은 기능 Task와 구현 잠금 차단 항목 없음. - agent-ui 상태 반영: 해당 없음
- 리뷰 코멘트: 코드레벨 종료 감사 통과. 큰 이슈나 별도 plan 필요 없음.
범위 제외
/v1/responses의 streaming 지원 또는 reasoning output item 확장- provider runtime 기동 옵션 자동 조정과 lifecycle 관리
- hidden reasoning token의 정확한 usage 산출
- 단계 호출 planner/generator/verifier 모드 전반의 제품 UX
- raw provider payload 장기 저장과 운영 ledger schema 구현
작업 컨텍스트
- 관련 경로:
apps/edge/internal/openai,apps/node/internal/adapters/openai_compat, openai-compatible-api.md, openai-compatible-api-contract.md,agent-test/dev - 표준선(선택): provider runtime은 reasoning-capable 상태로 띄우고, 요청별 제어는 OpenAI-compatible Edge request 계약에서 검증한 뒤 provider별 지원 option으로 매핑한다.
- 표준선(선택): 공개 request 표면은 provider raw wrapper를 그대로 열지 않고, IOP가 검증 가능한 OpenAI-compatible field와 내부 provider option 매핑으로 둔다.
- 선행 작업: OpenAI-compatible reasoning raw trace와 dev-runtime provider reasoning 활성화
- 후속 작업: 단계 호출과 검증 최적화 MVP, 요청 실행 로그와 Usage Ledger 기반
- 확인 필요: 없음