Skip to content

Commit c4200e4

Browse files
committed
feat: dynamo namespace scoping for frontend
1 parent 843912e commit c4200e4

File tree

6 files changed

+14
-34
lines changed

6 files changed

+14
-34
lines changed

components/backends/mocker/src/dynamo/mocker/main.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# Usage: `python -m dynamo.mocker --model-path /data/models/Qwen3-0.6B-Q8_0.gguf --extra-engine-args args.json`
55

66
import argparse
7+
import os
78
from pathlib import Path
89

910
import uvloop
@@ -14,7 +15,8 @@
1415

1516
from . import __version__
1617

17-
DEFAULT_ENDPOINT = "dyn://dynamo.backend.generate"
18+
DYN_NAMESPACE = os.environ.get("DYN_NAMESPACE", "dynamo")
19+
DEFAULT_ENDPOINT = f"dyn://{DYN_NAMESPACE}.backend.generate"
1820

1921
configure_dynamo_logging()
2022

components/backends/sglang/src/dynamo/sglang/args.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ def parse_args(args: list[str]) -> Config:
111111
# Dynamo argument processing
112112
# If an endpoint is provided, validate and use it
113113
# otherwise fall back to default endpoints
114-
namespace = os.environ.get("DYNAMO_NAMESPACE", "dynamo")
114+
namespace = os.environ.get("DYN_NAMESPACE", "dynamo")
115115

116116
endpoint = parsed_args.endpoint
117117
if endpoint is None:

components/backends/sglang/src/dynamo/sglang/utils/clear_namespace.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import argparse
55
import asyncio
66
import logging
7+
import os
78

89
from dynamo.runtime import DistributedRuntime, EtcdKvCache, dynamo_worker
910
from dynamo.runtime.logging import configure_dynamo_logging
@@ -24,6 +25,11 @@ async def clear_namespace(runtime: DistributedRuntime, namespace: str):
2425

2526
if __name__ == "__main__":
2627
parser = argparse.ArgumentParser()
27-
parser.add_argument("--namespace", type=str, required=True)
28+
parser.add_argument(
29+
"--namespace", type=str, required=False, default=os.environ.get("DYN_NAMESPACE")
30+
)
2831
args = parser.parse_args()
32+
assert (
33+
args.namespace
34+
), "Missing namespace, either pass --namespace or set DYN_NAMESPACE"
2935
asyncio.run(clear_namespace(args.namespace))

components/backends/vllm/README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ For complete Kubernetes deployment instructions, configurations, and troubleshoo
159159

160160
vLLM workers are configured through command-line arguments. Key parameters include:
161161

162-
- `--endpoint`: Dynamo endpoint in format `dyn://namespace.component.endpoint`
163162
- `--model`: Model to serve (e.g., `Qwen/Qwen3-0.6B`)
164163
- `--is-prefill-worker`: Enable prefill-only mode for disaggregated serving
165164
- `--metrics-endpoint-port`: Port for publishing KV metrics to Dynamo

components/backends/vllm/deploy/README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,6 @@ spec:
186186

187187
vLLM workers are configured through command-line arguments. Key parameters include:
188188

189-
- `--endpoint`: Dynamo endpoint in format `dyn://namespace.component.endpoint`
190189
- `--model`: Model to serve (e.g., `Qwen/Qwen3-0.6B`)
191190
- `--is-prefill-worker`: Enable prefill-only mode for disaggregated serving
192191
- `--metrics-endpoint-port`: Port for publishing KV metrics to Dynamo

components/backends/vllm/src/dynamo/vllm/args.py

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import logging
66
import os
7-
import sys
87
from typing import Optional
98

109
from vllm.config import KVTransferConfig
@@ -27,7 +26,6 @@
2726

2827
logger = logging.getLogger(__name__)
2928

30-
DEFAULT_ENDPOINT = "dyn://dynamo.backend.generate"
3129
DEFAULT_MODEL = "Qwen/Qwen3-0.6B"
3230

3331
VALID_CONNECTORS = {"nixl", "lmcache", "kvbm", "null", "none"}
@@ -70,12 +68,6 @@ def parse_args() -> Config:
7068
parser.add_argument(
7169
"--version", action="version", version=f"Dynamo Backend VLLM {__version__}"
7270
)
73-
parser.add_argument(
74-
"--endpoint",
75-
type=str,
76-
default=DEFAULT_ENDPOINT,
77-
help=f"Dynamo endpoint string in 'dyn://namespace.component.endpoint' format. Default: {DEFAULT_ENDPOINT}",
78-
)
7971
parser.add_argument(
8072
"--is-prefill-worker",
8173
action="store_true",
@@ -141,27 +133,9 @@ def parse_args() -> Config:
141133
# This becomes an `Option` on the Rust side
142134
config.served_model_name = None
143135

144-
namespace = os.environ.get("DYN_NAMESPACE", "dynamo")
145-
146-
if args.is_prefill_worker:
147-
args.endpoint = f"dyn://{namespace}.prefill.generate"
148-
else:
149-
# For decode workers, also use the provided namespace instead of hardcoded "dynamo"
150-
args.endpoint = f"dyn://{namespace}.backend.generate"
151-
152-
endpoint_str = args.endpoint.replace("dyn://", "", 1)
153-
endpoint_parts = endpoint_str.split(".")
154-
if len(endpoint_parts) != 3:
155-
logger.error(
156-
f"Invalid endpoint format: '{args.endpoint}'. Expected 'dyn://namespace.component.endpoint' or 'namespace.component.endpoint'."
157-
)
158-
sys.exit(1)
159-
160-
parsed_namespace, parsed_component_name, parsed_endpoint_name = endpoint_parts
161-
162-
config.namespace = parsed_namespace
163-
config.component = parsed_component_name
164-
config.endpoint = parsed_endpoint_name
136+
config.namespace = os.environ.get("DYN_NAMESPACE", "dynamo")
137+
config.component = "prefill" if args.is_prefill_worker else "backend"
138+
config.endpoint = "generate"
165139
config.engine_args = engine_args
166140
config.is_prefill_worker = args.is_prefill_worker
167141
config.migration_limit = args.migration_limit

0 commit comments

Comments
 (0)