update roadmap and deploy docs

This commit is contained in:
toki 2026-05-25 20:01:50 +09:00
parent 2c694bf2ec
commit 1a84420dac
5 changed files with 139 additions and 26 deletions

View file

@ -35,7 +35,7 @@ RAG, context 구성/압축, web search, MCP 정책, tool policy, output validati
- [진행중] 서빙 라우팅과 최적화 기반
- 경로: `agent-ops/roadmap/phase/serving-routing-optimization/PHASE.md`
- 요약: Edge OpenAI-compatible API에서 Node의 Ollama serving을 호출하는 한 사이클을 먼저 완성하고, 이후 로컬/클라우드 모델 profile, 부하 라우팅, 품질 평가 기준과 최적화 계층으로 확장하는 단계다.
- 요약: Edge OpenAI-compatible API에서 Node의 Ollama serving을 호출하는 E2E 한 사이클을 먼저 완성하고, 이후 로컬/클라우드 모델 profile, 부하 라우팅, 품질 평가 기준과 최적화 계층으로 확장하는 단계다.
## 로딩 정책

View file

@ -13,7 +13,7 @@
## 활성 Milestone
- [진행중] 모델 서빙과 부하 라우팅
- [진행중] Ollama E2E 서빙 안정화
- Phase: `agent-ops/roadmap/phase/serving-routing-optimization/PHASE.md`
- 경로: `agent-ops/roadmap/phase/serving-routing-optimization/milestones/model-serving-load-routing.md`

View file

@ -13,9 +13,9 @@
완료된 Milestone은 archive 경로를 가리키고, 검토중, 진행중, 계획 또는 보류 Milestone은 이 Phase 하위 `milestones/` 경로를 가리킨다.
완료, 검토중, 진행중, 계획 순서로 두어 아래로 갈수록 미래 작업에 가까워지게 정렬한다.
- [진행중] 모델 서빙과 부하 라우팅
- [진행중] Ollama E2E 서빙 안정화
- 경로: `agent-ops/roadmap/phase/serving-routing-optimization/milestones/model-serving-load-routing.md`
- 요약: Edge OpenAI-compatible API를 통해 Node에서 serving 중인 Ollama를 일반 OpenAI/Ollama client 경험에 가깝게 조회, 선택, 호출하는 한 사이클을 먼저 완성하고, 이후 Responses API와 로컬/클라우드 라우팅으로 확장한다.
- 요약: Edge OpenAI-compatible API를 통해 Node에서 serving 중인 Ollama를 일반 OpenAI/Ollama client 경험에 가깝게 조회, 선택, 호출하는 E2E 한 사이클을 먼저 완성하고, 자동 라우팅과 cloud fallback은 후속으로 미룬다.
- [계획] 지식, 도구 정책, 검증 최적화
- 경로: `agent-ops/roadmap/phase/serving-routing-optimization/milestones/knowledge-tool-validation-optimization.md`

View file

@ -1,4 +1,4 @@
# Milestone: 모델 서빙과 부하 라우팅
# Milestone: Ollama E2E 서빙 안정화
## 위치
@ -7,10 +7,9 @@
## 목표
로컬/클라우드 모델 runtime을 IOP의 `adapter + target` 실행 모델 안에서 운영할 수 있도록 Responses API를 포함한 OpenAI-compatible 모델 호출 표면, 모델 profile, 모델 선택, 부하 라우팅, 호출 로그와 품질 평가 기준을 정리한다.
현재 1차 우선순위는 Edge에 OpenAI API 방식으로 접속한 외부 agent/client가 Node에서 serving 중인 Ollama를 호출해 모델 조회, 모델 선택, chat completion 호출, streaming 응답까지 한 사이클을 완료하는 것이다.
로컬 모델을 우선 활용하되 cloud fallback과 품질 평가를 결합해 엔터프라이즈 모델 서비스에 가까운 운영 품질을 목표로 한다.
RAG, MCP, web search, output validation 같은 최적화 계층으로 넘어가기 전에 기본 모델 서빙과 라우팅 기반을 먼저 만든다.
Edge에 OpenAI API 방식으로 접속한 외부 agent/client가 Edge-Node 소켓 경로를 의식하지 않고 Node에서 serving 중인 Ollama를 사용할 수 있게 한다.
현재 1차 우선순위는 `/v1/models` 조회, `/v1/chat/completions` non-streaming/streaming 호출, 수동 Node/model 선택, 실제 Ollama 사용자 흐름 검증까지 E2E 한 사이클을 자연스럽게 완성하는 것이다.
자동 라우팅, 부하 라우팅, cloud fallback, 품질 평가 feedback, Responses API 세부 호환은 이 E2E baseline 이후의 후속 작업으로 분리한다.
## 상태
@ -23,23 +22,22 @@ RAG, MCP, web search, output validation 같은 최적화 계층으로 넘어가
## 범위
- 로컬/클라우드 모델 runtime profile 관리 기준
- 모델 선택, 부하 라우팅, fallback 후보 판단 기준
- OpenAI-compatible `/v1/chat/completions``/v1/responses` 호출을 내부 `adapter + target` 실행으로 해석하는 경계
- OpenAI-compatible `/v1/chat/completions` 호출을 내부 `adapter + target` 실행으로 해석하는 경계
- OpenAI-compatible `/v1/models` 조회와 `/v1/chat/completions` non-streaming/streaming 호출을 Edge -> Node -> Ollama 경로로 완성하는 1차 full-cycle
- 외부 agent/client가 일반 Ollama 또는 OpenAI-compatible endpoint를 쓰는 것과 유사하게 model을 조회하고, 요청 model을 내부 target으로 사용하고, 지원 가능한 generation option을 명확히 전달하는 경험
- Ollama 관련 조회/상태/관리 command를 IOP OpenAI-compatible 표면에서 어디까지 pass-through할지에 대한 1차 기준과 unsupported 응답 정책
- IOP native protocol 기반 내부 모델 호출 인터페이스 후보
- 모델 호출 로그, usage, 품질 평가 신호의 책임 위치
- NomadCode direct model endpoint 또는 Ollama fallback 전환을 지원하기 위한 IOP 측 모델 호출 표면
- 여러 Node와 여러 model은 자동 라우팅이 아니라 `openai.node`, `openai.models`, 요청 `model`, `openai.target` 조합을 수동으로 바꿔 검증한다.
- `bin/edge.sh``bin/node.sh`를 실제로 연결해 사용자가 직접 재현 가능한 필드 테스트 환경을 문서화한다.
- IOP native protocol, A2A, routing 최적화 계층과 OpenAI-compatible 서빙 표면의 책임 경계를 충돌 없이 정리한다.
## 필수 기능
### Epic: [model-routing-core] Model Routing Core
### Epic: [e2e-serving-core] E2E Serving Core
- [ ] [model-routing] 모델 선택과 local/cloud routing은 IOP 책임으로 정의한다.
- [ ] [cloud-fallback] 로컬 모델 우선 활용과 cloud fallback 기준을 함께 정의한다.
- [ ] [responses-api] OpenAI-compatible API는 chat completions와 Responses API를 포함하는 외부 모델 기반 호출 표면으로 정의한다.
- [ ] [edge-node-ollama-path] Edge OpenAI-compatible API 요청이 Edge-Node 소켓을 통해 Node Ollama adapter로 전달되는 E2E 경로가 검증되어 있다.
- [ ] [manual-node-select] Node 선택은 자동 라우팅이 아니라 `openai.node` 또는 단일 Node fallback 같은 수동 설정 기준으로 동작한다.
- [ ] [manual-model-select] model 선택은 요청 `model` 또는 `openai.target` 고정값을 통해 수동으로 검증할 수 있다.
- [ ] [routing-later] 자동 라우팅, 부하 라우팅, cloud fallback, 품질 평가 feedback은 후속 마일스톤으로 분리되어 있다.
### Epic: [ollama-openai-cycle] Ollama OpenAI-Compatible Full Cycle
@ -49,25 +47,27 @@ RAG, MCP, web search, output validation 같은 최적화 계층으로 넘어가
- [ ] [model-target-map] `openai.target` 고정 라우팅과 요청 `model` 기반 라우팅의 우선순위가 명확하며 Ollama model 선택 경험과 충돌하지 않는다.
- [ ] [option-pass-through] temperature, top_p, max_tokens, stop, stream 등 1차 지원 option의 매핑과 미지원 option 응답 정책이 정리되어 있다.
- [ ] [ollama-command-pass-through] Ollama 관련 모델 조회, 상태, 관리 command를 Edge OpenAI-compatible 표면에서 어디까지 pass-through할지 1차 범위가 정의되어 있다.
- [ ] [openai-ollama-smoke] Edge -> Node -> Ollama full-cycle smoke가 fake Ollama와 실제 Ollama 사용자 흐름 기준으로 검증된다.
- [ ] [openai-ollama-aux-smoke] fake Ollama 기반 보조 smoke가 OpenAI-compatible 입력 표면과 edge-node relay의 최소 생존을 확인한다.
- [ ] [toki-labs-field-flow] 공통 필드 테스트 환경에서 `toki-labs` Ollama `gemma4:26b` 모델을 사용해 사용자가 직접 재현 가능한 bin edge-node 흐름이 문서화되고 검증된다.
### Epic: [protocol-boundary] Protocol Boundary
- [ ] [a2a-boundary] A2A API는 외부 agent의 작업 위임 표면으로 제한한다.
- [ ] [nomadcode-a2a] NomadCode의 A2A 도입 시점은 이 Milestone에서 강제하지 않고 별도 판단으로 남긴다.
- [ ] [native-protocol] IOP native protocol은 proto-socket 기반 내부/운영 호출 기준으로 다.
- [ ] [native-protocol] IOP native protocol은 proto-socket 기반 내부/운영 호출 기준으로 두고 OpenAI-compatible UX에 운영 제어 기능을 억지로 싣지 않는다.
- [ ] [optimization-later] RAG, MCP, web search, output validation은 기본 serving/load routing 이후 단계로 명시한다.
## 완료 기준
- [ ] Responses API 호환 지원 범위와 chat completions baseline의 차이가 문서화된다.
- [ ] Edge `/v1/models``/v1/chat/completions`를 통해 Node의 Ollama serving을 조회하고 사용할 수 있다.
- [ ] 외부 agent/client가 Edge endpoint를 일반 OpenAI-compatible 또는 Ollama-backed endpoint처럼 설정해 한 차례 모델 조회와 chat completion을 완료할 수 있다.
- [ ] streaming/non-streaming 응답, model-to-target 매핑, 1차 option pass-through, unsupported option 응답 정책이 검증되어 있다.
- [ ] 모델 profile, routing 입력값, routing 결과, fallback 책임 경계가 문서화된다.
- [ ] `bin/edge.sh``bin/node.sh`를 실제로 연결해 Edge -> Node -> Ollama 흐름을 재현할 수 있다.
- [ ] 최종 완료 검증은 fake Ollama smoke가 아니라 사용자가 직접 테스트하는 방식과 같은 `toki-labs` 실제 Ollama 필드 흐름으로 수행된다.
- [ ] 공통 필드 테스트 환경의 Node host, Ollama endpoint, model, edge/node 임시 config 기준이 문서화되어 있다.
- [ ] Node/model 선택은 수동 설정으로 검증하고, 자동 라우팅과 부하 라우팅은 후속 작업으로 분리되어 있다.
- [ ] 외부 API 표면과 IOP native protocol의 역할이 충돌하지 않는다.
- [ ] NomadCode direct model endpoint/Ollama fallback 전환에 필요한 IOP 측 계약이 정리된다.
- [ ] 다음 Milestone인 지식/도구/검증 최적화로 넘어갈 선행 조건이 정의된다.
- [ ] 다음 단계인 model routing/fallback 최적화로 넘어갈 선행 조건이 정의된다.
## 완료 리뷰
@ -85,14 +85,17 @@ RAG, MCP, web search, output validation 같은 최적화 계층으로 넘어가
- output validation, retry/fallback loop의 세부 알고리즘 구현
- NomadCode 전용 task metadata 계약 확정
- 외부 Agent CLI adapter 추가 구현
- 자동 Node 라우팅, 부하 라우팅, cloud fallback, 품질 평가 feedback 구현
- Responses API 세부 호환 구현
## 작업 컨텍스트
- 관련 경로: `apps/edge`, `apps/node`, `packages/config`, `packages/observability`, `proto/iop`, `docs/architecture.md`, `apps/edge/README.md`
- 1차 우선순위: OTO/bootstrap 연동보다 Edge OpenAI-compatible API -> Node -> Ollama serving full-cycle을 먼저 완성한다.
- 공통 필드 테스트 환경: `docs/deploy-dev.md``공통 Ollama 필드 테스트 환경`을 따른다.
- 표준선(선택): 내부 실행 계약은 `adapter + target`을 유지하고, OpenAI-compatible API는 외부 호환 입력 표면으로 둔다.
- 표준선(선택): 1차 구현은 local Ollama를 기준으로 하며 cloud fallback, 품질 평가 feedback, Responses API 세부 호환은 chat completions baseline 이후 확장한다.
- 표준선(선택): Edge `/v1/models`는 설정된 model 목록과 Node capability/Ollama 조회 결과 중 사용 가능한 근거를 우선해 반환하고, 요청 `model``openai.target`이 비어 있을 때 내부 target으로 사용한다.
- 선행 작업: Edge 입력 표면, CLI Automation Runtime 안정화
- 후속 작업: 지식, 도구 정책, 검증 최적화
- 후속 작업: 모델 라우팅/fallback 최적화, 지식/도구 정책/검증 최적화
- 확인 필요: cloud fallback 도입 시점, Responses API 세부 호환 범위, 모델 품질 평가와 routing feedback의 초기 신호

View file

@ -117,6 +117,116 @@ repo root에서 수동으로 검증할 때는 기존 helper를 사용할 수 있
IOP_EDGE_ADDR=<edge-host>:9090 ./bin/node.sh
```
## 공통 Ollama 필드 테스트 환경
OpenAI-compatible Ollama E2E 서빙 검증은 아래 필드 환경을 공통 기준으로 사용한다.
이 환경은 특정 마일스톤에만 두지 않고, 이후 모델 서빙, routing, fallback, client 통합 검증에서도 재사용한다.
`scripts/e2e-openai-ollama.sh` 같은 fake Ollama smoke는 보조 확인이다.
완료 판정은 사용자가 직접 테스트하는 방식과 동일하게 `bin/edge.sh`, `bin/node.sh`, 실제 Ollama endpoint를 연결한 full-cycle 흐름으로 한다.
| 항목 | 값 |
|---|---|
| Node host | `ssh toki@toki-labs.com` |
| Ollama base URL | `http://192.168.0.97:11434` |
| 기준 model | `gemma4:26b` |
| 권장 node id | `node-toki-labs-ollama` |
| 권장 node alias | `toki-labs-ollama` |
기본 `configs/*.yaml`은 필드 테스트 값으로 덮어쓰지 않는다.
edge와 node는 임시 config 또는 `/etc/iop/*.yaml` 필드 설정을 사용한다.
Node가 사용할 Ollama endpoint는 node config가 아니라 edge config의 `nodes[].adapters.ollama.base_url`에 둔다.
Node는 registration 이후 Edge가 내려주는 adapter config로 Ollama를 호출한다.
edge host에서 임시 config를 만들 때의 기준은 다음과 같다.
`CHANGE_ME_FIELD_TOKEN``<edge-host>`는 테스트 시점의 값으로 바꾼다.
`openai.target`은 비워 두면 요청의 `model`을 내부 target으로 사용하고, `gemma4:26b`로 고정하면 외부 요청 model과 무관하게 해당 model로만 호출한다.
Node는 Edge로 outbound 연결하므로 `ssh toki@toki-labs.com` 환경에서 `<edge-host>:9090`에 접근할 수 있어야 한다.
로컬 개발 머신이 원격 host에서 직접 보이지 않으면 Edge를 접근 가능한 host에서 실행하거나 터널을 구성한다.
```yaml
edge:
id: "edge-toki-labs-field"
name: "Toki Labs Field Edge"
server:
listen: "0.0.0.0:9090"
openai:
enabled: true
listen: "0.0.0.0:8080"
node: "node-toki-labs-ollama"
adapter: "ollama"
target: ""
models:
- "gemma4:26b"
session_id: "openai-field"
timeout_sec: 300
nodes:
- id: "node-toki-labs-ollama"
alias: "toki-labs-ollama"
token: "CHANGE_ME_FIELD_TOKEN"
adapters:
ollama:
enabled: true
base_url: "http://192.168.0.97:11434"
context_size: 262144
```
edge 실행:
```bash
IOP_EDGE_CONFIG=/tmp/iop-edge-toki-labs.yaml ./bin/edge.sh
```
node host에 접속한 뒤 node 임시 config를 만든다.
```bash
ssh toki@toki-labs.com
```
```yaml
transport:
edge_addr: "<edge-host>:9090"
token: "CHANGE_ME_FIELD_TOKEN"
logging:
level: "info"
pretty: true
metrics:
port: 9091
```
node 실행:
```bash
IOP_NODE_CONFIG=/tmp/iop-node-toki-labs.yaml ./bin/node.sh
```
edge host에서 OpenAI-compatible API를 호출해 검증한다.
```bash
curl -fsS http://127.0.0.1:8080/v1/models
```
```bash
curl -fsS http://127.0.0.1:8080/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"gemma4:26b","messages":[{"role":"user","content":"Reply with IOP_OLLAMA_E2E_OK only."}]}'
```
streaming 검증:
```bash
curl -fsS -N http://127.0.0.1:8080/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"gemma4:26b","stream":true,"messages":[{"role":"user","content":"Reply with IOP_OLLAMA_STREAM_OK only."}]}'
```
완료 기준은 사용자가 재현하는 실제 절차에서 node registration, `/v1/models` 응답, non-streaming chat completion, streaming SSE chunk와 `data: [DONE]` 확인이다.
Edge/Node 뒤의 소켓 relay가 사용자 UX에 드러나지 않아야 하며, 실패 시 edge와 node 양쪽 로그를 함께 확인한다.
## Agent Bootstrap / Bridge References
OTO 같은 specialized domain agent의 bootstrap/enrollment 상세 계획은 `agent-ops/roadmap/milestones/agent-bootstrap-oto-enrollment.md`에서 관리한다.