iop/apps/node/internal/router/router.go
toki d764adb390 chore: agent-task 변경 사항 반영
- edge node store 및 console 업데이트
- node adapters(cli, ollama, vllm, mock) 리팩토링
- node router, run_manager, store 개선
- proto 파일(control.proto, runtime.proto) 및 생성 코드 업데이트
- config 업데이트
2026-05-10 20:41:33 +09:00

72 lines
1.9 KiB
Go

package router
import (
"context"
"fmt"
"go.uber.org/zap"
"iop/apps/node/internal/adapters"
"iop/apps/node/internal/runtime"
)
type defaultRouter struct {
registry *adapters.Registry
logger *zap.Logger
}
// New returns a Router that resolves requests to registered adapters.
func New(reg *adapters.Registry, logger *zap.Logger) runtime.Router {
return &defaultRouter{registry: reg, logger: logger}
}
func (r *defaultRouter) Resolve(_ context.Context, req runtime.RunRequest) (runtime.ExecutionSpec, error) {
adapterName := req.Adapter
if adapterName == "" {
adapterName = r.registry.Default()
}
if adapterName == "" {
return runtime.ExecutionSpec{}, fmt.Errorf("router: no adapters registered")
}
if _, ok := r.registry.Get(adapterName); !ok {
return runtime.ExecutionSpec{}, fmt.Errorf("router: adapter %q not found", adapterName)
}
spec := runtime.ExecutionSpec{
RunID: req.RunID,
Adapter: adapterName,
Target: req.Target,
SessionID: req.SessionID,
SessionMode: req.SessionMode,
Background: req.Background,
Workspace: req.Workspace,
Policy: req.Policy,
Input: req.Input,
TimeoutSec: req.TimeoutSec,
Metadata: req.Metadata,
}
r.logger.Debug("resolved execution spec",
zap.String("run_id", req.RunID),
zap.String("adapter", spec.Adapter),
zap.String("target", spec.Target),
)
return spec, nil
}
func (r *defaultRouter) ResolveAdapter(ctx context.Context, req runtime.RunRequest) (runtime.ExecutionSpec, runtime.Adapter, error) {
spec, err := r.Resolve(ctx, req)
if err != nil {
return runtime.ExecutionSpec{}, nil, err
}
adapter, ok := r.registry.Get(spec.Adapter)
if !ok {
return runtime.ExecutionSpec{}, nil, fmt.Errorf("router: adapter %q not found", spec.Adapter)
}
return spec, adapter, nil
}
func (r *defaultRouter) GetAdapter(adapterName string) (runtime.Adapter, bool) {
return r.registry.Get(adapterName)
}