用 cargo install smg 从源码安装时需要预装 protoc;网关默认监听 30000 端口,而示例 worker 在 8000 端口,需确认两者不冲突;聊天历史持久化需自行准备 PostgreSQL、Oracle 或 Redis,默认可能为内存存储。
smg
smg-projectApache-2.0活跃维护用 Rust 写的引擎无关 LLM 网关,统一兼容 OpenAI 与 Anthropic 接口,把 vLLM、SGLang、Gemini 等后端接到同一入口,并支持 KV 缓存感知路由和 gRPC 流水线。
Engine-agnostic LLM gateway in Rust. Full OpenAI & Anthropic API compatibility across vLLM, TRT-LLM, TokenSpeed, SGLang, OpenAI, Gemini & more. Industry-first gRPC pipeline, KV cache-aware routing, chat history, tokenization caching, Responses API, embeddings, WASM plugins, MCP, and multi-tenant auth.
docker pull lightseekorg/smg:latest
smg launch --worker-urls http://localhost:8000README 未说明网关自身的显存或 GPU 要求;后端支持 vLLM、SGLang、TensorRT-LLM、TokenSpeed 及 MLX(Apple Silicon)等自托管引擎。
统一接入 vLLM、SGLang 等自托管引擎和云厂商的 LLM 网关,负责路由与多租户管控
用 Rust 写的引擎无关 LLM 网关,统一兼容 OpenAI 与 Anthropic 接口,把 vLLM、SGLang、Gemini 等后端接到同一入口,并支持 KV 缓存感知路由和 gRPC 流水线。
核心能力
- 用 radix tree 跟踪各 worker 的 KV 缓存状态,实现缓存感知路由
- 统一 OpenAI 与 Anthropic 兼容 API,覆盖 Chat、Embeddings、Responses 等
- 原生 Rust 流式 gRPC 管道,支持 prefill/decode 与视觉 encode 分离
- 提供 10 种路由策略,含 least_load、power_of_two、consistent_hashing
- 内置 MCP 工具执行、WASM 插件与可插拔聊天历史存储
容易踩的坑
- v1.14.0最新正式版2026-11-03 · 2026-11-03 19:49 UTC
Shepherd Model Gateway v1.14.0
SMG v1.14.0 makes Symphony the default parser, brings the Rust engine servicers to every engine, and serves TokenSpeed over the direct ZMQ lane. On the same hosts it sustains up to 3.3× the request rate of v1.13.0 within the same latency target, and the router uses 21–59% less CPU per request on every model family we measured.
1,066 commits from 17 contributors, 6 of them first-time. Some defaults changed and some deployments need a step before upgrading: read Before you upgrade first.
Before you upgrade
- Symphony is the default parser.
--parser legacy(or the request headerX-SMG-Parser: legacy) keeps the old parsers. Existing--tool-call-parserand--reasoning-parsernames keep working. - Three flags are removed.
--kv-index,--kv-indexer-ttl-secsand--kv-indexer-max-entriesare gone; the chain index is the only KV index. A config that still sets them does not start. A per-policyload_check_interval_secsis refused; useload_monitor_interval_secs. - Engine pods take longer to become Ready, on purpose. Servicers warm up every batch size and prompt length before they report SERVING (about a minute at a 16k-token admission step;
SMG_<ENGINE>_SERVICER_WARMUP=fastoroffshortens or skips it). The gateway registers a gRPC worker only once its engine is healthy. Raise startup probes and rollout deadlines to match; the chart'srouter.progressDeadlineSecondsis now 1920 s. - Upgrade order. Roll gateways first, then engine pods with
smg1.14.0 andsmg-grpc-servicer0.15.0. tool_choice: "none"now renders the tools in the prompt, as the engines' own servers do. Prompt token counts and prefix-cache keys for such requests change once.- The gateway's API key is no longer forwarded upstream. Workers and external providers that relied on it need their own
api_keyat registration. - Helm. The API key, the Postgres and Redis URLs and the Oracle credentials come from Secrets (
auth.existingSecret,history.<store>.existingSecret). Worker images default toghcr.io/smg-project/smg. Discovery providers are configured underrouter.discovery. - Python bindings.
Router(...)andRouterArgs(...)take every parameter after(worker_urls, policy, host, port)and(worker_urls, host, port)as keyword-only. - Metrics. Six unused metric families are removed, the error counter gains a
reasonlabel, and new latency histograms arrive. Details under Upgrade notes.
Highlights
Faster at the shipped defaults
We ran v1.13.0 and v1.14.0 as shipped: one engine at tensor parallel 4 and one router per side, same hosts, same 8k-token chat workload (4k-token shared prefix, 128 output tokens). The table shows the highest request rate each build sustains while time-to-first-token p99 stays under 1 second.
Model family Max req/s at TTFT p99 < 1 s (v1.13.0 → v1.14.0) Router CPU per request GLM 5.3 Flash 3.0 → 9.8 (3.3×) −54% DeepSeek V4 Flash 4.4 → 9.8 (2.2×) −47% MiniMax M3 7.5–9.2 → 15.4–16.2 (about 2×) −35% to −45% Gemma 4 26B 32.3 → 32.3, TTFT p99 25% lower at 85% load −21% to −23% Qwen 3.6 35B-A3B equal, lower latency on every row −27% to −40% Inkling-Small 30.1 → 30.1, TTFT p99 7–37% lower −49% to −59% MiMo V2.6 Flash 30.1 → 30.1 −37% to −40% Kimi K3 (two-node) tie in both placements −47% DeepSeek V4.1 Flash tie within noise, lower TTFT p50 and TPOT p99 −31% to −45% Where the gain comes from:
- Engine step shape. A vLLM gRPC launch now derives the CUDA-graph capture cap from the admission step when the operator sets none. A step that mixes a prefill chunk with decodes replays a captured graph instead of running eagerly. Families whose recipes already captured those steps read equal capacity with lower tails.
- Router cost. A chat request costs 0.37M u
- Symphony is the default parser.
- v1.14.0-rc.2SMG v1.14.0-rc.2pre-release2026-11-03 · 2026-11-03 19:34 UTC
查看更新说明
SMG v1.14.0-rc.2
1065 commits since v1.13.0 on
release/1.14(the merged pull requests, by type):Features
- feat(gateway): Symphony is the default parser; --parser legacy and the X-SMG-Parser header keep the older parsers (#4677)
- feat(gateway): TokenSpeed engines serve every role on the direct ZMQ lane (#4649)
- feat(symphony): Llama 3.1 and 3.3 Instruct read with the json table under their own ids (#4655)
- feat(engine_zmq_adapter): a TokenSpeed engine's prompt logprobs, top-k candidates and abort status are read by the column names it declares (#4630)
- feat(gateway): media over the SGLang direct-ZMQ wire is assembled as the gRPC path assembles it, and the ZMQ lane runs the multimodal module (#4580)
- feat(tau2): add shared budget reservations (#4217)
- feat(servicer): a Rust servicer for the TensorRT-LLM gRPC contract, with its binding and launcher (#4494)
- feat(mock-worker): select repeatable output from prompt tokens (#4451)
- feat(servicer): the TokenSpeed servicer's control RPCs ride the wire's control call when the scheduler declares its reply (#4453)
- feat(servicer): the Rust SGLang servicer serves the EPD language side (#4413)
- feat(servicer): the Rust SGLang servicer carries multimodal inputs to the scheduler (#4405)
- feat(health): the readiness body names each served model with its readiness and a reason (#4412)
- feat(servicer): the Rust SGLang servicer serves prefill/decode disaggregation (#4411)
- feat(metrics): first-token and per-output-token latency histograms with their own bucket edges (#4410)
- feat(servicer): the Rust TokenSpeed servicer serves multimodal items of the Qwen3.5 MRoPE lineage (#4415)
- feat(servicer): the Rust TokenSpeed servicer serves prefill/decode disaggregation (#4408)
- feat(observability): the media pipeline's stages, items and fetches are series on the router and the worker side (#4377)
- feat(metrics): the router error counter carries the reason behind each error class (#4345)
- feat(helm): router.discovery.provider selects the worker discovery provider, and the Role exists only for what reads the Kubernetes API (#4391)
- feat(metrics): one per-worker routing-state series names why a worker is out of rotation (#4353)
- feat(metrics): the cached prompt tokens are a token type of the tokens counter and every cache-aware decision observes its match ratio (#4360)
- feat(metrics): the Symphony failure classes of a served model's table exist at zero from its first registration (#4348)
- feat(servicer): StartProfile and StopProfile on the vLLM wire, both servicers (#4369)
- feat(metrics): the KV capacity behind the engine's usage ratio and the block size the index routes by are gauges (#4357)
- feat(helm): a dashboard over the emitted families and a PrometheusRule with ten serving alerts (#4343)
- feat(helm): a gRPC worker can serve the servicer's Prometheus metrics from the engine pod (#4341)
- feat(mock-worker): the mock gRPC worker hosts the standard grpc.health.v1 service (#4338)
- feat(gateway): configure PD readiness capacity thresholds (#4331)
- feat(multimodal): expose media fetch timeouts (#4330)
- feat(servicer): a /metrics endpoint with request, token and latency metrics on every wire (#4149)
- feat(discovery): a Consul provider that discovers a service's passing instances (#4137)
- feat(glm): add native GLM-5.3 rendering and align Flash media processing (#4036)
- feat(multimodal): Nemotron-H Omni images shrink to a request's token budget, as the engine's tiler shrinks them (#4120)
- feat(multimodal): make the Hugging Face Hub download an optional hf-hub feature (#4119)
- feat(cache_aware): opt-in spill pricing for long-session prefill pools (#4089)
- feat(e2e): a mock engine row in the harness, with the answers stated by the test (#4070)
- feat(mock-worker): scripted answers on every wire, from a keyed file or the admin API (#4066)
- feat(discovery): a Slurm provider that discovers the nodes of running jobs (#4013)
- feat(symphony): the DeepSeek R1 line reads
- v1.14.0-rc.1SMG v1.14.0-rc.1pre-release2026-11-02 · 2026-11-02 09:43 UTC
查看更新说明
SMG v1.14.0-rc.1
1061 commits since v1.13.0 on
release/1.14(the merged pull requests, by type):Features
- feat(gateway): Symphony is the default parser; --parser legacy and the X-SMG-Parser header keep the older parsers (#4677)
- feat(gateway): TokenSpeed engines serve every role on the direct ZMQ lane (#4649)
- feat(symphony): Llama 3.1 and 3.3 Instruct read with the json table under their own ids (#4655)
- feat(engine_zmq_adapter): a TokenSpeed engine's prompt logprobs, top-k candidates and abort status are read by the column names it declares (#4630)
- feat(gateway): media over the SGLang direct-ZMQ wire is assembled as the gRPC path assembles it, and the ZMQ lane runs the multimodal module (#4580)
- feat(tau2): add shared budget reservations (#4217)
- feat(servicer): a Rust servicer for the TensorRT-LLM gRPC contract, with its binding and launcher (#4494)
- feat(mock-worker): select repeatable output from prompt tokens (#4451)
- feat(servicer): the TokenSpeed servicer's control RPCs ride the wire's control call when the scheduler declares its reply (#4453)
- feat(servicer): the Rust SGLang servicer serves the EPD language side (#4413)
- feat(servicer): the Rust SGLang servicer carries multimodal inputs to the scheduler (#4405)
- feat(health): the readiness body names each served model with its readiness and a reason (#4412)
- feat(servicer): the Rust SGLang servicer serves prefill/decode disaggregation (#4411)
- feat(metrics): first-token and per-output-token latency histograms with their own bucket edges (#4410)
- feat(servicer): the Rust TokenSpeed servicer serves multimodal items of the Qwen3.5 MRoPE lineage (#4415)
- feat(servicer): the Rust TokenSpeed servicer serves prefill/decode disaggregation (#4408)
- feat(observability): the media pipeline's stages, items and fetches are series on the router and the worker side (#4377)
- feat(metrics): the router error counter carries the reason behind each error class (#4345)
- feat(helm): router.discovery.provider selects the worker discovery provider, and the Role exists only for what reads the Kubernetes API (#4391)
- feat(metrics): one per-worker routing-state series names why a worker is out of rotation (#4353)
- feat(metrics): the cached prompt tokens are a token type of the tokens counter and every cache-aware decision observes its match ratio (#4360)
- feat(metrics): the Symphony failure classes of a served model's table exist at zero from its first registration (#4348)
- feat(servicer): StartProfile and StopProfile on the vLLM wire, both servicers (#4369)
- feat(metrics): the KV capacity behind the engine's usage ratio and the block size the index routes by are gauges (#4357)
- feat(helm): a dashboard over the emitted families and a PrometheusRule with ten serving alerts (#4343)
- feat(helm): a gRPC worker can serve the servicer's Prometheus metrics from the engine pod (#4341)
- feat(mock-worker): the mock gRPC worker hosts the standard grpc.health.v1 service (#4338)
- feat(gateway): configure PD readiness capacity thresholds (#4331)
- feat(multimodal): expose media fetch timeouts (#4330)
- feat(servicer): a /metrics endpoint with request, token and latency metrics on every wire (#4149)
- feat(discovery): a Consul provider that discovers a service's passing instances (#4137)
- feat(glm): add native GLM-5.3 rendering and align Flash media processing (#4036)
- feat(multimodal): Nemotron-H Omni images shrink to a request's token budget, as the engine's tiler shrinks them (#4120)
- feat(multimodal): make the Hugging Face Hub download an optional hf-hub feature (#4119)
- feat(cache_aware): opt-in spill pricing for long-session prefill pools (#4089)
- feat(e2e): a mock engine row in the harness, with the answers stated by the test (#4070)
- feat(mock-worker): scripted answers on every wire, from a keyed file or the admin API (#4066)
- feat(discovery): a Slurm provider that discovers the nodes of running jobs (#4013)
- feat(symphony): the DeepSeek R1 line reads
- v1.13.0V1.13.02026-10-15 · 2026-10-15 19:04 UTC
查看更新说明
Shepherd Model Gateway v1.13.0
SMG v1.13.0 makes the gRPC serving path faster, lighter and closer to the engines behind it. On the same 18 engines as v1.12.0, it serves nearly twice the image traffic and finishes those requests 3.3× sooner, with 38–56% less CPU per request and about half the router memory. It also serves 1.63× the image traffic of another open-source router on the same hosts. The tokenizer, media pipeline and chat templates now produce what the engines' own processors produce, and the OpenAI and Anthropic routes answer the way the public APIs do. The gateway refuses misconfiguration and overload up front instead of failing later, and this release closes several security gaps, listed first under Notable fixes. Symphony, a single table-driven parser for reasoning and tool calls, now runs inside the gateway as an opt-in beta.
This release includes 567 commits from 11 contributors, including 2 first-time contributors. Some defaults changed, and some deployments need a step before upgrading: see Before you upgrade.
The fleet figures come from this release's validation run, which compared v1.12.0 and v1.13.0 on the same hosts, engines and traffic. Other figures come from benchmarks of the individual changes. They measure different workloads and should not be combined into one overall speedup. For latency, p99 means 99% of measurements were at or below that value.
Before you upgrade
- Postgres or Oracle history store: this release adds schema migration 4. Set
auto_migrate: truein the store's schema config (orDB_AUTO_MIGRATE=true), or apply the statements the gateway prints, and create the sweep index on existing tables (see Storage). - Browser clients: CORS is closed unless
--cors-allowed-originsis set. Pass'*'to keep v1.12.0's open policy. - Media from internal hosts: URLs that resolve to private or loopback addresses are refused. Set
--mm-allow-private-media-hostson the gateway, andSMG_MM_ALLOW_PRIVATE_MEDIA_HOSTS=1on workers that run SMG's media pipeline. - Helm: the readiness probe moved to
/readiness, so a router whose workers register only through the admin API never becomes Ready; setrouter.readinessProbe.path: /healthfor that setup. A custom router image must run as UID 65532 or overriderouter.securityContext.runAsUser. - Stricter start-up: an unreachable Postgres or Redis store, a mesh that cannot start, and a list of malformed settings now stop the gateway before it binds a port. Check your configuration against Configuration that now refuses to start.
- Engine pods on the Rust servicer: roll gateways first, then install
smg1.13.0 together withsmg-grpc-servicer0.14.0. The new servicer fails withTypeErroragainst the 1.12.0smgwheel. - Python
Router(...)users: metrics now bind all interfaces whenprometheus_hostis unset (v1.12.0 bound127.0.0.1). - Dashboards and API clients: two metrics became histograms, error labels and error envelopes changed, and some requests that used to pass are now refused with 400. See Upgrade notes.
Highlights
Nearly twice the image traffic on the same GPUs, at less than half the CPU per request
v1.12.0 and v1.13.0 ran in turn on the same 18 GPU hosts, with the same vLLM 0.31.0 engines and the same traffic:
Traffic Requests/s Median request time CPU per request Router memory One image per request 61.4 → 120.0 (1.95×) 2.59 → 0.77 s (3.3× faster) 56% less 47% less Short prompts, shared prefixes 65.4 → 66.6 2.69 → 2.67 s 38% less 55% less Long multi-turn conversations 76.2 → 76.1 0.58 → 0.57 s 48% less 43% less - Text traffic is paced by the engines, so its throughput holds. The gain there is cost
- Postgres or Oracle history store: this release adds schema migration 4. Set
- v1.12.02026-10-08 · 2026-10-08 18:08 UTC
查看更新说明
Shepherd Model Gateway v1.12.0
SMG v1.12.0 adds AMD prefill/decode support contributed by the AMD team and improves performance across gateway streaming, tokenization, engine services, cache-aware routing, and multimodal processing. It also adds Decisions and System One endpoints and fixes streaming, tool-call, and worker-management issues.
This release includes 141 commits from 19 contributors, including 9 first-time contributors.
Benchmarks below are reported in the linked PRs. They measure different workloads and should not be combined into one overall speedup. For latency, p99 means 99% of measurements were at or below that value.
Highlights
AMD prefill/decode support — contributed by the AMD team
The AMD team added support for running prompt processing (prefill) and token generation (decode) on separate AMD GPU workers, using vLLM and MoRI-IO. Thanks to @chunfangamd for the implementation, follow-up fixes, and hardware validation.
- READ and WRITE cache transfers. SMG coordinates both modes between vLLM HTTP workers, fixing the missing transfers that previously caused incorrect output or hanging requests. Streaming and non-streaming
/v1/chat/completionsand/v1/completionsare supported. #2732. - Data-parallel deployments. SMG assigns each request to the same data-parallel rank on both workers, distributes requests across ranks, and rejects mismatched configurations. This enables models such as DeepSeek-R1 with multiple data-parallel ranks. #2798.
- Optional concurrent WRITE dispatch. Starting both workers together lets the decode worker allocate cache while prefill runs, reducing dispatch delay. Set
moriio_write_dispatch=concurrenton the decode worker to enable it. Sequential dispatch remains the default because early cancellation can leave cache memory allocated in the tested vLLM connector. #2742. - Validated transfers. SMG checks the transfer identity, peer details, ports, cache-block lists, and rank information before accepting a transfer. If validation fails, a sequential request stops before decode begins; a concurrent request fails before its decode response is returned. These checks protect against hung requests, incorrect output, and engine crashes. #2764, #2773.
Validated on two AMD MI355X nodes, including Qwen3-0.6B with tensor-parallel sizes of 1 and 8, and DeepSeek-R1-0528 (FP8) with eight data-parallel ranks and expert parallelism. Tests checked actual cache data transferred over the network, streaming responses, concurrent requests, and failure handling. Validation.
In the reported Qwen3-0.6B test, concurrent WRITE reduced median time to first token from 71.5–72.0 ms to 46.1–46.2 ms at four concurrent requests—about 36% lower—and increased throughput from 9.89–9.98 to 10.62–10.65 requests/s. These measurements used the same two-node setup, approximately 4,350 input tokens and 64 output tokens, with three alternating rounds. Benchmark.
Faster gateway streaming and tokenization
- Less CPU per streamed request. Logging, request counting, router lookup, and cache-aware worker selection avoid repeated locking and bookkeeping. Ordinary log-level settings use the faster filter automatically; advanced span filters keep their existing behavior. #2752.
- Faster follow-up turns in long conversations. The tokenizer now caches the deepest reusable boundary after a cache hit, so each new turn can reuse the growing conversation instead of repeatedly tokenizing its earlier text. Cache storage remains proportional to prompt length.
- READ and WRITE cache transfers. SMG coordinates both modes between vLLM HTTP workers, fixing the missing transfers that previously caused incorrect output or hanging requests. Streaming and non-streaming
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Engine-agnostic, high-performance model-routing gateway for large-scale LLM deployments. SMG centralizes worker lifecycle management, balances traffic across self-hosted engines and cloud providers, and gives you enterprise-grade control over multi-tenancy, chat-history storage, MCP tooling, and observability — behind one unified endpoint.
Why SMG?
| 🚀 Maximize GPU Utilization | Cache-aware routing tracks each worker's KV-cache state in radix trees to reuse prefixes across SGLang, vLLM, TensorRT-LLM, TokenSpeed, and MLX — with load modeling that accounts for queued token work and KV pressure. |
| 🔌 One API, Any Backend | Route to self-hosted engines over HTTP or gRPC, or to OpenAI, Anthropic, Gemini, and xAI — plus any OpenAI-compatible endpoint — through a single unified gateway. |
| ⚡ Built for Speed | Native Rust with streaming gRPC pipelines, cached tokenization with zero-copy cache hits, prefill/decode disaggregation (including a separate encode stage for vision), and DP-aware routing for data-parallel engines. |
| 🔒 Enterprise Control | Priority admission scheduling with preemption and per-tenant controls, API-key auth with OIDC on the control plane, WebAssembly plugins for custom logic, and chat history that never leaves your infrastructure. |
| 📊 Full Observability | 90+ Prometheus metrics, OpenTelemetry tracing with W3C trace context propagated into the engines over both HTTP and gRPC, and structured JSON logs with request correlation. |
API Coverage: OpenAI Chat Completions, Completions, Embeddings, Rerank, and Classify; Responses and Conversations APIs for agents; Anthropic Messages; Gemini Interactions; Realtime over WebSocket and WebRTC; audio transcription; tokenize/detokenize; and MCP tool execution with approval policies in the Responses and Messages APIs.
Quick Start
Install — pick your preferred method:
# Docker
docker pull lightseekorg/smg:latest
# Kubernetes (Helm)
helm install smg oci://ghcr.io/smg-project/charts/smg
# Python
pip install smg
# Rust (needs protoc)
cargo install smg
Run — point SMG at your inference workers:
# Single worker
smg launch --worker-urls http://localhost:8000
# Multiple workers with cache-aware routing
smg launch --worker-urls http://gpu1:8000 http://gpu2:8000 --policy cache_aware
# With high availability mesh
smg launch --worker-urls http://gpu1:8000 --enable-mesh \
--mesh-advertise-host 10.0.0.1 --mesh-peer-urls 10.0.0.2:39527
Use — send requests to the gateway:
curl http://localhost:30000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "llama3", "messages": [{"role": "user", "content": "Hello!"}]}'
That's it. SMG is now load-balancing requests across your workers.
Supported Backends
| Self-Hosted Engines | vLLM · SGLang · TokenSpeed · TensorRT-LLM · MLX (Apple Silicon) · any OpenAI-compatible server (e.g. Ollama) |
| Cloud Providers | OpenAI · Anthropic · Google Gemini · xAI · OCI Generative AI · AWS Bedrock · Azure OpenAI · any OpenAI-compatible provider (Groq, Together, …) |
Features
| Feature | Description |
|---|---|
| 10 Routing Policies | cache_aware, least_load, power_of_two, consistent_hashing, prefix_hash, bucket, round_robin, random, manual, passthrough |
| gRPC Pipeline | Native streaming gRPC to the engines with prefill/decode and encode disaggregation and DP-aware routing |
| Kubernetes Discovery | Native pod watchers with label selectors, per-role prefill/decode/encode selectors, and router peer discovery |
| Model Parsers | 21 tool-call parsers and 16 reasoning parsers with automatic model detection — DeepSeek, Qwen, Kimi, GLM, Llama, Mistral, Command, Nemotron, and more |
| MCP Integration | Tool discovery and execution over stdio, SSE, and streamable HTTP, with approval policies and audit logging |
| High Availability | Mesh networking with SWIM gossip and CRDT-replicated state for multi-node deployments |
| Chat History | Pluggable storage with schema migrations: PostgreSQL, Oracle, Redis, or in-memory |
| WASM Plugins | Extend request and response handling with custom WebAssembly middleware |
| Resilience | Circuit breakers, retries with backoff and jitter, rate limiting, and priority admission scheduling |
Documentation
Full documentation lives at lightseek.org/smg.
| Getting Started | Installation and first steps |
| Architecture | How SMG works |
| Configuration | CLI reference and options |
| API Reference | OpenAI-compatible endpoints |
| Kubernetes Setup | In-cluster discovery and production setup |
Contributing
We welcome contributions! See the Contributing Guide for details.