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.

v1.14.0发布于 2026-11-03 19:49 UTC709star +6 / 7 天214fork同步于 2026-11-10 23:54 UTC

怎么上手

由 README 提炼,执行前请确认
docker pull lightseekorg/smg:latest
smg launch --worker-urls http://localhost:8000
硬件要求按 README 说明

README 未说明网关自身的显存或 GPU 要求;后端支持 vLLM、SGLang、TensorRT-LLM、TokenSpeed 及 MLX(Apple Silicon)等自托管引擎。

支持 Apple Silicon有 Docker 镜像
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

统一接入 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 插件与可插拔聊天历史存储

容易踩的坑

用 cargo install smg 从源码安装时需要预装 protoc;网关默认监听 30000 端口,而示例 worker 在 8000 端口,需确认两者不冲突;聊天历史持久化需自行准备 PostgreSQL、Oracle 或 Redis,默认可能为内存存储。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v1.14.0
  1. 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 header X-SMG-Parser: legacy) keeps the old parsers. Existing --tool-call-parser and --reasoning-parser names keep working.
    • Three flags are removed. --kv-index, --kv-indexer-ttl-secs and --kv-indexer-max-entries are gone; the chain index is the only KV index. A config that still sets them does not start. A per-policy load_check_interval_secs is refused; use load_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=fast or off shortens 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's router.progressDeadlineSeconds is now 1920 s.
    • Upgrade order. Roll gateways first, then engine pods with smg 1.14.0 and smg-grpc-servicer 0.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_key at 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 to ghcr.io/smg-project/smg. Discovery providers are configured under router.discovery.
    • Python bindings. Router(...) and RouterArgs(...) 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 reason label, 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 familyMax req/s at TTFT p99 < 1 s (v1.13.0 → v1.14.0)Router CPU per request
    GLM 5.3 Flash3.0 → 9.8 (3.3×)−54%
    DeepSeek V4 Flash4.4 → 9.8 (2.2×)−47%
    MiniMax M37.5–9.2 → 15.4–16.2 (about 2×)−35% to −45%
    Gemma 4 26B32.3 → 32.3, TTFT p99 25% lower at 85% load−21% to −23%
    Qwen 3.6 35B-A3Bequal, lower latency on every row−27% to −40%
    Inkling-Small30.1 → 30.1, TTFT p99 7–37% lower−49% to −59%
    MiMo V2.6 Flash30.1 → 30.1−37% to −40%
    Kimi K3 (two-node)tie in both placements−47%
    DeepSeek V4.1 Flashtie 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
  2. 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
  3. 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
  4. 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: true in the store's schema config (or DB_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-origins is 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-hosts on the gateway, and SMG_MM_ALLOW_PRIVATE_MEDIA_HOSTS=1 on 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; set router.readinessProbe.path: /health for that setup. A custom router image must run as UID 65532 or override router.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 smg 1.13.0 together with smg-grpc-servicer 0.14.0. The new servicer fails with TypeError against the 1.12.0 smg wheel.
    • Python Router(...) users: metrics now bind all interfaces when prometheus_host is unset (v1.12.0 bound 127.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:

    TrafficRequests/sMedian request timeCPU per requestRouter memory
    One image per request61.4 → 120.0 (1.95×)2.59 → 0.77 s (3.3× faster)56% less47% less
    Short prompts, shared prefixes65.4 → 66.62.69 → 2.67 s38% less55% less
    Long multi-turn conversations76.2 → 76.10.58 → 0.57 s48% less43% less
    • Text traffic is paced by the engines, so its throughput holds. The gain there is cost
  5. 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/completions and /v1/completions are 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=concurrent on 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.

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    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 UtilizationCache-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 BackendRoute 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 SpeedNative 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 ControlPriority 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 Observability90+ 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 EnginesvLLM · SGLang · TokenSpeed · TensorRT-LLM · MLX (Apple Silicon) · any OpenAI-compatible server (e.g. Ollama)
    Cloud ProvidersOpenAI · Anthropic · Google Gemini · xAI · OCI Generative AI · AWS Bedrock · Azure OpenAI · any OpenAI-compatible provider (Groq, Together, …)

    Features

    FeatureDescription
    10 Routing Policiescache_aware, least_load, power_of_two, consistent_hashing, prefix_hash, bucket, round_robin, random, manual, passthrough
    gRPC PipelineNative streaming gRPC to the engines with prefill/decode and encode disaggregation and DP-aware routing
    Kubernetes DiscoveryNative pod watchers with label selectors, per-role prefill/decode/encode selectors, and router peer discovery
    Model Parsers21 tool-call parsers and 16 reasoning parsers with automatic model detection — DeepSeek, Qwen, Kimi, GLM, Llama, Mistral, Command, Nemotron, and more
    MCP IntegrationTool discovery and execution over stdio, SSE, and streamable HTTP, with approval policies and audit logging
    High AvailabilityMesh networking with SWIM gossip and CRDT-replicated state for multi-node deployments
    Chat HistoryPluggable storage with schema migrations: PostgreSQL, Oracle, Redis, or in-memory
    WASM PluginsExtend request and response handling with custom WebAssembly middleware
    ResilienceCircuit breakers, retries with backoff and jitter, rate limiting, and priority admission scheduling

    Documentation

    Full documentation lives at lightseek.org/smg.

    Getting StartedInstallation and first steps
    ArchitectureHow SMG works
    ConfigurationCLI reference and options
    API ReferenceOpenAI-compatible endpoints
    Kubernetes SetupIn-cluster discovery and production setup

    Contributing

    We welcome contributions! See the Contributing Guide for details.