- Implement mixed provider dispatch with selection-first and path classifier strategies - Add model queue service for provider load balancing - Add OpenAI chat handler and stream updates for mixed provider support - Add comprehensive tests for dispatch and queue logic - Add inventory for Ornith vLLM mixed provider config - Archive completed agent tasks (G06, G07)
50 lines
3.8 KiB
Text
50 lines
3.8 KiB
Text
# Complete - m-model-group-mixed-provider-dispatch/02-selection-first-provider-dispatch
|
|
|
|
## 완료 일시
|
|
|
|
2026-07-12
|
|
|
|
## 요약
|
|
|
|
Provider-pool selection-first dispatch의 tunnel auth pre-dispatch 준비와 provider-pool tool-validation retry guard를 검토해 3번째 루프에서 PASS로 종결했다.
|
|
|
|
## 루프 이력
|
|
|
|
| Plan | Review | Verdict | 메모 |
|
|
|------|--------|---------|------|
|
|
| `plan_local_G07_0.log` | `code_review_local_G07_0.log` | FAIL | tunnel auth late-binding과 provider-pool tool-validation retry coverage 공백 확인 |
|
|
| `plan_local_G07_1.log` | `code_review_local_G07_1.log` | FAIL | wire request 전 header 반영 실패와 retry path guard 누락 확인 |
|
|
| `plan_local_G07_2.log` | `code_review_local_G07_2.log` | PASS | pre-dispatch `PrepareTunnel`, normalized-only retry guard, provider-pool retry regression 확인 |
|
|
|
|
## 구현/정리 내용
|
|
|
|
- `SubmitProviderPool`가 provider 후보를 한 번 선택한 뒤 tunnel 또는 normalized path를 실행하고, tunnel path의 provider auth/header 준비를 `buildProviderTunnelRequest`와 Node `Send` 전에 수행한다.
|
|
- Chat handler의 provider-pool retry가 normalized `ProviderPoolDispatchResult`만 계속 처리하고 tunnel/nil run result는 명시 오류로 종료하도록 guarded extraction을 적용했다.
|
|
- 리뷰 중 `gofmt`를 관련 Go 파일에 적용해 포맷 drift를 정리했다.
|
|
|
|
## 최종 검증
|
|
|
|
- `gofmt -l apps/edge/internal/openai/chat_handler.go apps/edge/internal/openai/server.go apps/edge/internal/openai/server_test.go apps/edge/internal/openai/stream.go apps/edge/internal/service/model_queue.go apps/edge/internal/service/model_queue_test.go apps/edge/internal/service/run_dispatch.go apps/edge/internal/service/run_dispatch_internal_test.go` - PASS; no output.
|
|
- `git diff --check` - PASS; no output.
|
|
- `rg --sort path --line-number '(ProviderPool|provider-pool|pool).*(ToolValidation|tool validation|tool-validation|retry)|(ToolValidation|tool validation|tool-validation|retry).*(ProviderPool|provider-pool|pool)' apps/edge/internal/openai/server_test.go` - PASS; provider-pool tool-validation retry tests found.
|
|
- `GOCACHE=/tmp/iop-go-cache go test ./apps/edge/internal/openai -run 'TestChatProviderTunnelProviderAuthRequired|TestChatCompletionsProviderPoolTunnelProviderAuthForwardedBeforeDispatch|TestChatCompletionsProviderPoolOllamaSelectionAllowsMissingProviderAuth' -count=1` - PASS; `ok iop/apps/edge/internal/openai 0.010s`.
|
|
- `GOCACHE=/tmp/iop-go-cache go test ./apps/edge/internal/openai -run 'ProviderPool.*ToolValidation|ToolValidation.*ProviderPool' -count=1` - PASS; `ok iop/apps/edge/internal/openai 0.008s`.
|
|
- `GOCACHE=/tmp/iop-go-cache go test ./apps/edge/internal/openai -count=1` - PASS; `ok iop/apps/edge/internal/openai 11.733s`.
|
|
- `GOCACHE=/tmp/iop-go-cache go test ./apps/edge/internal/service -count=1` - PASS; `ok iop/apps/edge/internal/service 1.054s`.
|
|
- `GOCACHE=/tmp/iop-go-cache go test ./apps/edge/...` - PASS; all edge packages passed.
|
|
|
|
## Roadmap Completion
|
|
|
|
- Milestone: `agent-roadmap/phase/routing-policy-model-orchestration/milestones/model-group-mixed-provider-dispatch.md`
|
|
- Milestone link: [Milestone 문서](agent-roadmap/phase/routing-policy-model-orchestration/milestones/model-group-mixed-provider-dispatch.md)
|
|
- Completed task ids:
|
|
- `selection-first-path`: PASS; evidence=`agent-task/archive/2026/07/m-model-group-mixed-provider-dispatch/02-selection-first-provider-dispatch/plan_local_G07_2.log`, `agent-task/archive/2026/07/m-model-group-mixed-provider-dispatch/02-selection-first-provider-dispatch/code_review_local_G07_2.log`; verification=`GOCACHE=/tmp/iop-go-cache go test ./apps/edge/internal/openai -count=1`, `GOCACHE=/tmp/iop-go-cache go test ./apps/edge/internal/service -count=1`, `GOCACHE=/tmp/iop-go-cache go test ./apps/edge/...`
|
|
- Not completed task ids: 없음
|
|
|
|
## 잔여 Nit
|
|
|
|
- 없음
|
|
|
|
## 후속 작업
|
|
|
|
- 없음
|