feat: routing-policy-model-orchestration - responses passthrough & model group mixed provider dispatch

This commit is contained in:
toki 2026-07-11 12:44:32 +09:00
parent 12a26d4b4c
commit 1659fc568e
5 changed files with 26 additions and 20 deletions

View file

@ -26,7 +26,7 @@ IOP의 OpenAI-compatible, A2A, IOP native 입력 표면에서 들어온 요청
- [계획] Model Group Mixed Provider Dispatch
- 경로: [model-group-mixed-provider-dispatch](milestones/model-group-mixed-provider-dispatch.md)
- 요약: model group provider pool에서 OpenAI-compatible wire provider와 Ollama/CLI 같은 normalized provider를 같은 후보군으로 두고, 기존 capacity+priority 선택 뒤 provider capability에 따라 raw passthrough 또는 normalized 실행 경로를 자동 결정한다.
- 요약: model group provider pool에서 OpenAI-compatible provider와 Ollama/CLI 같은 normalized provider를 같은 후보군으로 두고, 기존 capacity+priority 선택 뒤 OpenAI-compatible 지원 provider는 모두 passthrough, native provider는 normalized 실행 경로로 자동 결정한다.
- [스케치] OpenAI-compatible 하이브리드 라우팅과 컨텍스트 최적화
- 경로: [openai-compatible-hybrid-routing-context-optimization](milestones/openai-compatible-hybrid-routing-context-optimization.md)

View file

@ -8,7 +8,8 @@
## 목표
Model group provider pool이 OpenAI-compatible wire provider와 native/normalized provider를 같은 후보군으로 다룰 수 있게 한다.
Edge는 기존 `capacity + priority` 기준으로 provider를 먼저 선택하고, 선택된 provider의 capability에 따라 OpenAI-compatible provider는 provider tunnel raw passthrough 라인으로, Ollama/CLI 같은 native provider는 normalized 실행 경로로 자동 dispatch한다.
Edge는 기존 `capacity + priority` 기준으로 provider를 먼저 선택하고, 선택된 provider가 OpenAI-compatible 호출 방식을 지원하면 모두 passthrough 방식으로 dispatch한다.
OpenAI-compatible 호출 방식을 지원하지 않는 Ollama/CLI 같은 native provider만 normalized 실행 경로로 dispatch한다.
Client 요청은 provider 실행 경로를 고르는 필드를 넣지 않으며, provider-specific/custom request field는 provider-pool route에서 먼저 보존한 뒤 선택된 실행 경로의 계약에 맞게 처리한다.
## 상태
@ -36,10 +37,12 @@ Client 요청은 provider 실행 경로를 고르는 필드를 넣지 않으며,
- `models[]` provider-pool/model group에서 OpenAI-compatible provider와 normalized provider를 동일 후보로 평가하는 selection-first dispatch
- `capacity + priority` 기준의 기존 provider 선택 정책 유지
- provider capability 기반 실행 경로 분기
- provider type/label/capability가 `openai_compat`, `openai_api`, `vllm`, `vllm-mlx`, `lemonade`, `sglang`, `seulgivibe_*`, openweight cloud request model 계열인 provider: provider tunnel raw passthrough 라인과 sideband observation
- OpenAI-compatible 호출 방식 지원 여부 기반 실행 경로 분기
- OpenAI-compatible 호출 방식을 지원하는 모든 provider: passthrough 방식
- provider type/label/capability가 `openai_compat`, `openai_api`, `vllm`, `vllm-mlx`, `lemonade`, `sglang`, `seulgivibe_*`, openweight cloud request model 계열인 provider: OpenAI-compatible provider로 보고 passthrough 방식
- provider type/capability가 `ollama`, `cli` 및 OpenAI-compatible wire를 지원하지 않는 provider: normalized
- Seulgivibe Claude/OpenAI provider는 현재 구현 중인 Seulgivibe Milestone의 auth/catalog/Responses passthrough 범위를 유지하되, 이 Milestone의 classifier에서는 `seulgivibe_claude`, `seulgivibe_openai` 모두 OpenAI-compatible passthrough-capable line에 포함한다.
- Seulgivibe Claude/OpenAI provider는 현재 구현 중인 Seulgivibe Milestone의 auth/catalog/Responses passthrough 범위를 유지하되, 이 Milestone의 classifier에서는 `seulgivibe_claude`, `seulgivibe_openai` 모두 OpenAI-compatible passthrough provider에 포함한다.
- OpenAI-compatible provider의 tunnel 구현이 누락된 경우 normalized fallback으로 낮추지 않고 구현 결함 또는 unsupported 상태로 처리하는 기준
- Ollama provider를 model group에서 제외하지 않고, 작은 capacity/priority 설정으로 운영자가 후보 가중치를 조절하는 방식
- model group 요청에서 client-controlled `metadata.iop_response_mode` 또는 동등한 passthrough/normalized selector를 제거/거부하는 계약
- provider-pool Chat/Responses route의 raw request 보존과 provider-specific/custom field 처리
@ -53,7 +56,7 @@ Client 요청은 provider 실행 경로를 고르는 필드를 넣지 않으며,
Model group이 provider 종류에 따라 normalized-only로 후퇴하지 않고, 선택된 provider 성격에 맞는 실행 경로로 dispatch되는 capability를 묶는다.
- [ ] [selection-first-path] Provider-pool route가 provider 후보를 먼저 선택하고 같은 queue slot/lease로 `ProviderTunnelRequest` 또는 normalized `RunRequest` 중 하나를 실행한다. 검증: `go test ./apps/edge/internal/service -count=1`에서 double scheduling 없이 selected provider path가 고정됨을 확인한다.
- [ ] [provider-path-classifier] Provider type/label/capability classifier가 OpenAI-compatible wire provider를 provider tunnel raw passthrough line으로, Ollama/CLI/native provider를 normalized로 분류한다. Seulgivibe aliases는 이 passthrough-capable line에 포함한다. 검증: `go test ./packages/go/config -count=1`, `go test ./apps/edge/internal/node -count=1`, `go test ./apps/node/internal/adapters -count=1`이 provider alias와 adapter capability case를 포함해 통과한다.
- [ ] [provider-path-classifier] Provider classifier가 OpenAI-compatible 호출 방식을 지원하는 모든 provider를 passthrough 방식으로, Ollama/CLI/native provider를 normalized로 분류한다. Seulgivibe aliases는 passthrough provider에 포함한다. 검증: `go test ./packages/go/config -count=1`, `go test ./apps/edge/internal/node -count=1`, `go test ./apps/node/internal/adapters -count=1`이 provider alias와 adapter capability case를 포함해 통과한다.
- [ ] [mixed-model-group] 같은 model group 안의 vLLM/vLLM-MLX/Lemonade/openweight cloud provider와 Ollama provider가 모두 후보로 남고, 선택된 provider별로 tunnel 또는 normalized path가 실행된다. 검증: `go test ./apps/edge/internal/openai -count=1`, `go test ./apps/edge/internal/service -count=1`이 mixed group, Ollama-only group, tunnel-only group fixture를 포함해 통과한다.
### Epic: [model-group-surface] Model Group Client Surface
@ -97,11 +100,12 @@ Model group mixed dispatch의 공개/내부 계약을 문서와 구현 타입에
- 관련 경로: `packages/go/config`, `apps/edge/internal/openai`, `apps/edge/internal/service`, `apps/edge/internal/node`, `apps/node/internal/adapters/openai_compat`, `apps/node/internal/adapters/ollama`, `apps/node/internal/runtime`, `proto/iop/runtime.proto`, [openai-compatible-api.md](../../../../agent-contract/outer/openai-compatible-api.md), [edge-node-runtime-wire.md](../../../../agent-contract/inner/edge-node-runtime-wire.md), [edge-config-runtime-refresh.md](../../../../agent-contract/inner/edge-config-runtime-refresh.md)
- 표준선(선택): Model group은 normalized provider만 묶는 추상화가 아니다. OpenAI-compatible wire provider와 native provider를 같은 candidate set에 두고, 선택된 provider가 실행 경로를 결정한다.
- 표준선(선택): OpenAI-compatible wire를 지원하는 openweight cloud provider, Seulgivibe Claude/OpenAI provider, 로컬 vLLM/vLLM-MLX/Lemonade/SGLang 계열은 provider tunnel raw passthrough 라인에 속한다. sideband는 내부 observation 또는 문서화된 extension-safe 지점으로만 다루며, client 요청 selector가 아니다.
- 표준선(선택): OpenAI-compatible 호출 방식을 지원하는 모든 provider는 passthrough 방식에 속한다. 여기에는 openweight cloud provider, Seulgivibe Claude/OpenAI provider, 로컬 vLLM/vLLM-MLX/Lemonade/SGLang 계열이 포함된다. sideband는 내부 observation 또는 문서화된 extension-safe 지점으로만 다루며, client 요청 selector가 아니다.
- 표준선(선택): OpenAI-compatible provider에서 tunnel/passthrough 구현이 빠져 있으면 normalized fallback으로 처리하지 않는다. 이는 구현 결함 또는 unsupported 상태다.
- 표준선(선택): Ollama와 CLI처럼 OpenAI-compatible wire를 지원하지 않는 provider는 model group 안에서도 normalized로 실행한다. Ollama는 제외하지 않으며 운영자는 capacity/priority로 낮은 동시성을 표현한다.
- 표준선(선택): Model group client request에는 `passthrough`, `passthrough+sideband`, `normalized`, `transformed` 같은 실행 경로 selector를 넣지 않는다.
- 표준선(선택): 표준 OpenAI-compatible client 요청은 표준-compatible 응답을 받고, IOP-aware/custom 요청은 문서화된 extension-safe 지점에서만 sideband/custom observation을 볼 수 있다.
- 우선순위/정합성: 현재 active 흐름에서는 [OpenAI-compatible 출력 검증 필터](../../knowledge-tool-optimization-extension/milestones/openai-compatible-output-validation-filters.md)와 [Seulgivibe OpenAI-compatible Provider 연동](seulgivibe-openai-compatible-provider.md)을 함께 고려한다. Seulgivibe 구현은 이 Milestone의 passthrough-capable provider line과 충돌하지 않아야 하며, mixed provider dispatch 자체는 본 Milestone이 소유한다.
- 우선순위/정합성: 현재 active 흐름에서는 [OpenAI-compatible 출력 검증 필터](../../knowledge-tool-optimization-extension/milestones/openai-compatible-output-validation-filters.md)와 [Seulgivibe OpenAI-compatible Provider 연동](seulgivibe-openai-compatible-provider.md)을 함께 고려한다. Seulgivibe 구현은 OpenAI-compatible provider는 passthrough 방식이라는 기준과 충돌하지 않아야 하며, mixed provider dispatch 자체는 본 Milestone이 소유한다.
- 선행 작업: [OpenAI-compatible Raw Tunnel과 Sideband Passthrough](../../../archive/phase/routing-policy-model-orchestration/milestones/openai-compatible-raw-tunnel-sideband-passthrough.md), [Model Alias Provider Pool과 Provider Catalog](../../operational-observability-provider-management/milestones/provider-catalog-device-status.md)
- 후속 작업: OpenAI-compatible 하이브리드 라우팅과 컨텍스트 최적화, route scorer, policy learning loop
- 확인 필요: 없음

View file

@ -40,7 +40,7 @@ Codex `wire_api=responses` 경로가 provider tunnel을 통해 동작하도록 `
- OpenAI/Codex 모델 `gpt-5.1`, `gpt-5.5` 정적 model catalog
- 사용자별 raw token을 inbound request header에서 읽어 provider tunnel `Authorization` header로 전달하는 경계
- Chat Completions provider tunnel과 Responses provider tunnel의 Seulgivibe passthrough 지원
- Seulgivibe provider가 model group에 참여할 때 `seulgivibe_claude`, `seulgivibe_openai`를 OpenAI-compatible passthrough-capable provider line으로 유지하는 기준
- Seulgivibe provider가 model group에 참여할 때 `seulgivibe_claude`, `seulgivibe_openai`를 OpenAI-compatible passthrough provider로 유지하는 기준
- model group request에서 client-controlled `metadata.iop_response_mode` 또는 동등한 passthrough/normalized selector를 받지 않는 기준
## 기능
@ -78,7 +78,7 @@ Seulgivibe를 IOP 내부에서는 provider-first OpenAI-compatible resource로
- 관련 경로: `packages/go/config`, `apps/edge/internal/openai`, `apps/edge/internal/service`, `apps/edge/internal/node`, `apps/node/internal/adapters/openai_compat`, `apps/node/internal/runtime`, `proto/iop/runtime.proto`, [openai-compatible-api.md](../../../../agent-contract/outer/openai-compatible-api.md)
- 표준선(선택): Seulgivibe는 새 wire adapter가 아니라 OpenAI-compatible provider family로 관리하고, provider별 특수 처리는 generation passthrough 밖의 auth/catalog/config 경계에만 둔다.
- 표준선(선택): Seulgivibe Claude/OpenAI provider aliases는 [Model Group Mixed Provider Dispatch](model-group-mixed-provider-dispatch.md)의 passthrough-capable provider line에 포함된다. mixed provider dispatch의 일반 selection/path 분기는 해당 Milestone이 소유하고, 본 Milestone은 Seulgivibe auth/catalog/Responses raw passthrough를 소유한다.
- 표준선(선택): Seulgivibe Claude/OpenAI provider aliases는 OpenAI-compatible 호출 방식을 지원하므로 [Model Group Mixed Provider Dispatch](model-group-mixed-provider-dispatch.md)의 passthrough provider에 포함된다. mixed provider dispatch의 일반 selection/path 분기는 해당 Milestone이 소유하고, 본 Milestone은 Seulgivibe auth/catalog/Responses passthrough를 소유한다.
- 표준선(선택): 사용자별 provider token은 request-time raw value로만 받고, Edge가 provider tunnel request header로 변환한다. Node나 host-local helper script가 사용자 token source of truth가 되지 않는다.
- 표준선(선택): provider `/models` endpoint가 실패해도 IOP `/v1/models`는 top-level `models[]` catalog를 source of truth로 노출한다.
- 우선순위 순서: [OpenAI-compatible 출력 검증 필터](../../knowledge-tool-optimization-extension/milestones/openai-compatible-output-validation-filters.md) 완료 후 본 Milestone을 진행한다.

View file

@ -34,7 +34,7 @@
| Contract | [openai-compatible-api.md](../../../../agent-contract/outer/openai-compatible-api.md), [edge-node-runtime-wire.md](../../../../agent-contract/inner/edge-node-runtime-wire.md), [edge-config-runtime-refresh.md](../../../../agent-contract/inner/edge-config-runtime-refresh.md) | 외부 OpenAI-compatible model group surface, provider tunnel, normalized run dispatch, provider config 계약 |
| Spec | [openai-compatible-surface.md](../../../../agent-spec/input/openai-compatible-surface.md), [provider-pool-config-refresh.md](../../../../agent-spec/runtime/provider-pool-config-refresh.md), [edge-node-execution.md](../../../../agent-spec/runtime/edge-node-execution.md) | 현재 구현 surface와 runtime behavior 문서 |
| Code | `packages/go/config`, `apps/edge/internal/openai`, `apps/edge/internal/service`, `apps/edge/internal/node`, `apps/node/internal/adapters/openai_compat`, `apps/node/internal/adapters/ollama`, `apps/node/internal/runtime`, `proto/iop/runtime.proto` | config validation, provider selection, OpenAI handler, Edge-Node wire, adapter capability 구현 기준 |
| User Decision | 현재 사용자 요청 | Ollama는 model group에서 제외하지 않는다. 후보는 동일하게 두고 capacity/priority로 가중한다. model group request에는 response path selector를 두지 않는다. OpenAI-compatible wire provider는 provider tunnel raw passthrough line으로, Ollama/CLI/native provider는 normalized로 처리한다. Seulgivibe Claude/OpenAI aliases는 passthrough-capable line에 포함한다. custom request fields는 provider-pool ingress에서 보존한다. |
| User Decision | 현재 사용자 요청 | Ollama는 model group에서 제외하지 않는다. 후보는 동일하게 두고 capacity/priority로 가중한다. model group request에는 response path selector를 두지 않는다. OpenAI-compatible 호출 방식을 지원하는 provider는 모두 passthrough 방식으로 처리하고, Ollama/CLI/native provider는 normalized로 처리한다. Seulgivibe Claude/OpenAI aliases는 passthrough provider에 포함한다. custom request fields는 provider-pool ingress에서 보존한다. |
## State Machine
@ -45,8 +45,8 @@
| `invalid-request` | model group request가 `metadata.iop_response_mode` 또는 동등한 execution path selector를 포함하거나 필수 routing field가 없다 | terminal error | model group client surface contract |
| `candidate-selection` | model group의 provider mapping과 connected node status가 있다 | `provider-selected` 또는 `no-capacity` | existing capacity/priority/health rules |
| `no-capacity` | 사용 가능한 provider candidate가 없다 | terminal error | queue policy |
| `provider-selected` | queue slot이 특정 provider id/node/adapter/served target에 할당되었다 | `execution-path-resolved` | selected provider capability |
| `execution-path-resolved` | selected provider가 provider tunnel을 지원한다 | `passthrough-dispatch` | OpenAI-compatible wire provider |
| `provider-selected` | queue slot이 특정 provider id/node/adapter/served target에 할당되었다 | `execution-path-resolved` | selected provider의 OpenAI-compatible 지원 여부 |
| `execution-path-resolved` | selected provider가 OpenAI-compatible 호출 방식을 지원한다 | `passthrough-dispatch` | OpenAI-compatible provider |
| `execution-path-resolved` | selected provider가 normalized-only다 | `normalized-dispatch` | Ollama/CLI/native provider |
| `passthrough-dispatch` | raw request body를 model rewrite와 provider auth/header 정책만 적용해 Node tunnel로 보낸다 | `provider-response-relayed` 또는 `provider-error` | `ProviderTunnelRequest` |
| `normalized-dispatch` | standard OpenAI-compatible request subset을 internal `RunRequest`로 변환해 selected adapter로 보낸다 | `normalized-response-built` 또는 `provider-error` | `RunRequest`/adapter `Execute` |
@ -64,11 +64,12 @@
- unknown/Codex/provider-specific request fields는 provider-pool ingress에서 strict decode로 버리거나 거부하지 않는다.
- `nodes[].providers[].capacity`, `priority`, `enabled`, health/status, model membership은 기존 provider selection 기준이다.
- 실행 경로:
- OpenAI-compatible wire provider는 Node adapter가 `ProviderTunnelAdapter` capability를 제공해야 하며, model group에서는 provider tunnel raw passthrough 실행 경로를 사용한다.
- OpenAI-compatible 호출 방식을 지원하는 provider는 모두 passthrough 실행 경로를 사용한다.
- OpenAI-compatible provider는 Node adapter가 `ProviderTunnelAdapter` capability를 제공해야 한다. 이 capability가 없으면 normalized fallback이 아니라 구현 결함 또는 unsupported 상태로 처리한다.
- `ollama`, `cli` 및 OpenAI-compatible wire를 지원하지 않는 native provider는 normalized `RunRequest` 실행 경로를 사용한다.
- provider type/label/capability가 `openai_compat`, `openai_api`, `vllm`, `vllm-mlx`, `lemonade`, `sglang`, `seulgivibe_claude`, `seulgivibe_openai` 계열이면 tunnel-capable provider로 분류한다.
- provider type/capability가 `ollama`, `cli`이면 normalized-only provider로 분류한다.
- Seulgivibe Claude/OpenAI provider는 현재 Seulgivibe Milestone에서 다루는 auth/catalog/Responses passthrough 구현을 유지하면서도, 이 classifier에서는 OpenAI-compatible passthrough-capable line에 포함된다.
- Seulgivibe Claude/OpenAI provider는 현재 Seulgivibe Milestone에서 다루는 auth/catalog/Responses passthrough 구현을 유지하면서도, 이 classifier에서는 OpenAI-compatible passthrough provider에 포함된다.
- selection에서 provider type만을 이유로 Ollama를 제외하지 않는다. 운영자는 작은 capacity/priority로 Ollama 동시성 한계를 표현한다.
- 출력:
- 표준 OpenAI-compatible client 요청에는 표준-compatible response를 반환하고 불필요한 IOP custom field/event를 섞지 않는다.
@ -91,7 +92,7 @@
|----|----------------|-------|------|------|
| S01 | `selection-first-path` | mixed model group에 vLLM provider와 Ollama provider가 있고 둘 다 healthy/capacity가 있다 | provider-pool route를 실행한다 | 기존 capacity/priority 기준으로 provider를 한 번 선택하고, 같은 selected provider로 tunnel 또는 normalized 실행을 수행한다 |
| S02 | `selection-first-path` | selected provider가 Ollama다 | Chat Completions request를 처리한다 | Edge가 `ProviderTunnelRequest`를 보내지 않고 normalized `RunRequest`로 Ollama adapter를 실행한다 |
| S03 | `provider-path-classifier` | provider type/label/capability가 `vllm`, `vllm-mlx`, `lemonade`, `openai_compat`, `seulgivibe_claude`, `seulgivibe_openai` 중 하나다 | execution path를 resolve한다 | provider tunnel capable로 분류하고 raw passthrough path를 선택한다 |
| S03 | `provider-path-classifier` | provider type/label/capability가 `vllm`, `vllm-mlx`, `lemonade`, `openai_compat`, `seulgivibe_claude`, `seulgivibe_openai` 중 하나이거나 OpenAI-compatible 호출 방식을 지원한다 | execution path를 resolve한다 | passthrough path를 선택한다 |
| S04 | `provider-path-classifier` | provider type/capability가 `ollama` 또는 `cli`다 | execution path를 resolve한다 | normalized-only로 분류하고 model group 후보에서는 제외하지 않는다 |
| S05 | `mixed-model-group` | Ollama-only model group config가 있다 | OpenAI-compatible Chat request를 보낸다 | provider-pool route가 정상 후보를 찾고 normalized OpenAI-compatible response를 반환한다 |
| S06 | `no-client-response-mode` | model group request가 `metadata.iop_response_mode`를 포함한다 | Edge handler가 route envelope를 parse한다 | request는 `400 invalid_request_error`로 거부되고 provider dispatch가 발생하지 않는다 |
@ -133,7 +134,8 @@
## 작업 컨텍스트
- 표준선: Model group provider 후보는 provider type 때문에 제외하지 않고 기존 capacity/priority/health/model membership으로 선택한다.
- 표준선: 선택된 provider가 OpenAI-compatible wire를 지원하면 raw tunnel 기반 passthrough path를 사용하고, Ollama/CLI/native provider면 normalized path를 사용한다. Seulgivibe Claude/OpenAI aliases는 이 passthrough-capable line에 포함한다.
- 표준선: 선택된 provider가 OpenAI-compatible 호출 방식을 지원하면 passthrough path를 사용하고, Ollama/CLI/native provider면 normalized path를 사용한다. Seulgivibe Claude/OpenAI aliases는 passthrough provider에 포함한다.
- 표준선: OpenAI-compatible provider에서 tunnel/passthrough 구현이 누락된 경우 normalized fallback으로 처리하지 않는다.
- 표준선: model group client request는 provider execution path를 지정하지 않는다. `metadata.iop_response_mode`는 model group route에서 제거/거부 대상이다.
- 표준선: Chat provider-pool ingress는 Responses provider-pool ingress처럼 raw body와 route envelope를 분리해 custom/provider-specific field를 보존할 준비를 한다.
- 후속 SDD: 없음

View file

@ -33,7 +33,7 @@
| Contract | [openai-compatible-api.md](../../../../agent-contract/outer/openai-compatible-api.md) | 외부 OpenAI-compatible request/response, model list, provider auth header 계약 |
| Code | `packages/go/config`, `apps/edge/internal/openai`, `apps/edge/internal/service`, `apps/edge/internal/node`, `apps/node/internal/adapters/openai_compat`, `apps/node/internal/runtime`, `proto/iop/runtime.proto` | config schema, route dispatch, provider tunnel, Node adapter header relay 구현 기준 |
| External Provider | Seulgivibe Claude/OpenAI proxy | Claude path와 OpenAI path 모두 OpenAI-compatible provider로 취급한다. Catalog는 IOP static config가 source of truth다. |
| User Decision | 현재 사용자 요청 | 세부 구현은 기존 provider-first/openai_compat/passthrough 표준선으로 확정 가능하다. Seulgivibe Claude/OpenAI aliases는 model group mixed dispatch에서 OpenAI-compatible passthrough-capable provider line에 포함하며, model group request가 `metadata.iop_response_mode`로 실행 경로를 고르지 않는다. |
| User Decision | 현재 사용자 요청 | 세부 구현은 기존 provider-first/openai_compat/passthrough 표준선으로 확정 가능하다. Seulgivibe Claude/OpenAI aliases는 OpenAI-compatible 호출 방식을 지원하므로 model group mixed dispatch에서 passthrough provider에 포함하며, model group request가 `metadata.iop_response_mode`로 실행 경로를 고르지 않는다. |
## State Machine
@ -63,7 +63,7 @@
- IOP `/v1/models`: static `models[]` catalog의 Seulgivibe model ids를 반환한다.
- Chat Completions provider tunnel: provider status/header/body bytes를 raw relay하고 provider auth header를 포함한다.
- Responses provider tunnel: `/v1/responses` raw body를 model rewrite 외에는 보존해 provider로 전달하고 raw response를 relay한다.
- Seulgivibe provider가 model group에 포함될 때 execution path는 provider-derived이며, Seulgivibe aliases는 OpenAI-compatible passthrough-capable line으로 분류된다.
- Seulgivibe provider가 model group에 포함될 때 execution path는 provider-derived이며, Seulgivibe aliases는 OpenAI-compatible passthrough provider로 분류된다.
- 금지:
- IOP runtime이 `~/.claude/anthropic_key.sh`, `~/.codex/config.toml`, local env helper를 token source로 읽지 않는다.
- 실제 token 값을 tracked config/docs/task artifact/log에 쓰지 않는다.
@ -112,5 +112,5 @@
- 표준선: Seulgivibe는 OpenAI-compatible provider family로 관리하고, generation request body는 provider tunnel passthrough를 우선한다.
- 표준선: 사용자별 provider token은 request-time header value이며 IOP config에는 token source와 forwarding rule만 둔다.
- 표준선: `/v1/responses` provider route는 provider-original `passthrough`를 기본값으로 둔다. Seulgivibe model group request가 `metadata.iop_response_mode`로 response path를 선택하지 않는다. response body model echo rewrite는 하지 않는다.
- 표준선: Seulgivibe Claude/OpenAI aliases는 Model Group Mixed Provider Dispatch의 passthrough-capable provider line에 포함한다. mixed provider dispatch 일반화는 별도 Milestone이 소유한다.
- 표준선: Seulgivibe Claude/OpenAI aliases는 OpenAI-compatible 호출 방식을 지원하므로 Model Group Mixed Provider Dispatch의 passthrough provider에 포함한다. mixed provider dispatch 일반화는 별도 Milestone이 소유한다.
- 후속 SDD: 없음