From e751c899379d269e162ebf41ba6bd94968333194 Mon Sep 17 00:00:00 2001 From: Ilker Manap Date: Tue, 29 Sep 2026 10:44:45 +0200 Subject: [PATCH] Serve the project's website at /about, with its fonts in the binary The website was a file built by hand outside the repository. It is now a template in internal/web: every gateway serves it at /about, without a key, linked from the landing page's footer, and the published site is rendered from the same template. The fonts are vendored (Latin subsets, OFL) so the page sends nobody's browser to Google. The proxy configurations it shows are copies of deploy/proxy, kept equal by a test. A development build says so instead of linking to release files that do not exist. Co-Authored-By: Claude Opus 5.5 (1M context) --- CHANGELOG.md | 8 + deploy/proxy/README.md | 3 + internal/router/handlers.go | 5 +- internal/web/about.go | 79 +++ internal/web/about_test.go | 83 +++ internal/web/proxy/Caddyfile | 41 ++ internal/web/proxy/nginx.conf | 63 +++ internal/web/static/fonts/NOTICE | 17 + internal/web/static/fonts/OFL-Archivo.txt | 93 +++ internal/web/static/fonts/OFL-IBMPlex.txt | 93 +++ internal/web/static/fonts/archivo-latin.woff2 | Bin 0 -> 90096 bytes .../static/fonts/plex-mono-400-latin.woff2 | Bin 0 -> 10052 bytes .../static/fonts/plex-mono-500-latin.woff2 | Bin 0 -> 10060 bytes .../web/static/fonts/plex-sans-latin.woff2 | Bin 0 -> 40240 bytes internal/web/templates/about.html | 531 ++++++++++++++++++ internal/web/templates/landing.html | 2 +- 16 files changed, 1016 insertions(+), 2 deletions(-) create mode 100644 internal/web/about.go create mode 100644 internal/web/about_test.go create mode 100644 internal/web/proxy/Caddyfile create mode 100644 internal/web/proxy/nginx.conf create mode 100644 internal/web/static/fonts/NOTICE create mode 100644 internal/web/static/fonts/OFL-Archivo.txt create mode 100644 internal/web/static/fonts/OFL-IBMPlex.txt create mode 100644 internal/web/static/fonts/archivo-latin.woff2 create mode 100644 internal/web/static/fonts/plex-mono-400-latin.woff2 create mode 100644 internal/web/static/fonts/plex-mono-500-latin.woff2 create mode 100644 internal/web/static/fonts/plex-sans-latin.woff2 create mode 100644 internal/web/templates/about.html diff --git a/CHANGELOG.md b/CHANGELOG.md index 278ba2a..a98eb61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -150,6 +150,14 @@ The account page (was "Your keys") shows the last thirty days of a person's own use and, for each place they spend, a bar for every budget that applies — their own, or a project's shared with others, said as such. +### The project's website, in every gateway + +`/about` is llmgw's own page: what it does, InfiniBand and NVLink, installing, +the reverse proxy configurations, and the release's files to download. It is +served without a key like `/`, whose footer links to it, and says nothing about +the installation. Its fonts are in the binary, so it makes no request elsewhere. +The published website is rendered from the same template. + ### The admin pages - The cluster page leads with capacity, nodes, models and replicas, then usage; diff --git a/deploy/proxy/README.md b/deploy/proxy/README.md index e82424c..71bccd4 100644 --- a/deploy/proxy/README.md +++ b/deploy/proxy/README.md @@ -10,6 +10,9 @@ put it behind a proxy that holds a publicly trusted certificate. Both are also attached to every release. +The `/about` page shows both, from copies in `internal/web/proxy`; a test fails +when those differ from these, so change them here and copy them over. + Four things both files get right, and any other proxy has to as well: - **Streaming is not buffered.** Replies are server-sent events; a buffering diff --git a/internal/router/handlers.go b/internal/router/handlers.go index ca6638a..f71a526 100644 --- a/internal/router/handlers.go +++ b/internal/router/handlers.go @@ -117,6 +117,9 @@ func (r *Router) Handler() http.Handler { mux.HandleFunc("GET /", web.Landing(version.Version, r.auth != nil, r.accounts != nil && r.accounts.SignupOpen(), r.landing.Contact, r.landing.Notice)) + // What llmgw is and how to install it: about the software, not this + // installation, so it needs no key either. + mux.HandleFunc("GET /about", web.About(version.Version)) mux.Handle("GET /_static/", web.Static()) mux.HandleFunc("GET /me", r.handleMe) // Somebody has to be able to say "forget that", and a retention window is @@ -199,7 +202,7 @@ func (r *Router) Handler() http.Handler { // route must not be able to add an unauthenticated one by omission. Health // stays open because a load balancer has no key. return auth.Middleware(r.auth, r.log, - "/health", "/ready", "/", "/_static/", "/claim/", + "/health", "/ready", "/", "/about", "/_static/", "/claim/", "/signup", "/login", "/logout", "/profile", "/profile/", "/admin", "/admin/", "/chat", "/chat/", "/org", "/org/", "/setup/")(mux) } diff --git a/internal/web/about.go b/internal/web/about.go new file mode 100644 index 0000000..71ede4d --- /dev/null +++ b/internal/web/about.go @@ -0,0 +1,79 @@ +package web + +import ( + "embed" + "io" + "net/http" + "regexp" + "strings" +) + +// The page about llmgw itself: what it is, how to install it, where to get +// it. It is the project's website, carried by every gateway so an operator +// has it where they already are, and served without a key like the landing +// page — it says nothing about this installation, only about the software. +// +// The same template renders the published website (Site), which differs in +// three ways: fonts from Google rather than from this binary, no link back to +// a gateway, and features on main marked as coming in the next release. + +// proxyConfigs are the reverse proxy configurations the page shows. They are +// copies of deploy/proxy, which the release attaches; embed cannot reach +// outside this package, and TestAboutProxyConfigsMatchDeploy keeps the two +// the same. +// +//go:embed proxy +var proxyConfigs embed.FS + +// AboutData is what the page is rendered with. +type AboutData struct { + // Version is what this build calls itself; Release is the same when it is + // a released version, and empty for a development build, which has no + // files to download. + Version, Release string + // Download is where the release's files are, or for a development build + // the proxy configurations on main. + Download string + // Date is the release date, when it is known. A binary does not know it. + Date string + Caddy, Nginx string + Site bool +} + +// releaseTag is a version the releases page has files for. +var releaseTag = regexp.MustCompile(`^v\d+\.\d+\.\d+$`) + +const repoURL = "https://gitea.mynodes.xyz/ilker/llmgw" + +// NewAboutData fills the page's data for a version. +func NewAboutData(version string) AboutData { + d := AboutData{Version: version, Download: repoURL + "/raw/branch/main/deploy/proxy"} + if releaseTag.MatchString(version) { + d.Release = version + d.Download = repoURL + "/releases/download/" + version + } + d.Caddy = proxyConfig("Caddyfile") + d.Nginx = proxyConfig("nginx.conf") + return d +} + +func proxyConfig(name string) string { + b, err := proxyConfigs.ReadFile("proxy/" + name) + if err != nil { + panic("web: the proxy configuration " + name + " is missing from the binary: " + err.Error()) + } + return strings.TrimRight(string(b), "\n") +} + +// RenderAbout writes the page, for the website's build as much as for About. +func RenderAbout(w io.Writer, d AboutData) error { + return tmpl.ExecuteTemplate(w, "about", d) +} + +// About serves the page at /about. +func About(version string) http.HandlerFunc { + d := NewAboutData(version) + return func(w http.ResponseWriter, r *http.Request) { + render(w, "about", d) + } +} diff --git a/internal/web/about_test.go b/internal/web/about_test.go new file mode 100644 index 0000000..ca151d7 --- /dev/null +++ b/internal/web/about_test.go @@ -0,0 +1,83 @@ +package web + +import ( + "bytes" + "net/http" + "os" + "strings" + "testing" +) + +func TestAboutPageForARelease(t *testing.T) { + code, body := get(t, About("v1.2.3"), "http://llmgw.example/about", nil) + if code != http.StatusOK { + t.Fatalf("status %d", code) + } + for _, want := range []string{ + "", + repoURL + "/releases/download/v1.2.3/llmgw-v1.2.3-linux-amd64", + "VERSION=v1.2.3", + "reverse_proxy", // the Caddyfile, inline + "proxy_read_timeout", // and nginx's + `This gateway`, + "/_static/fonts/archivo-latin.woff2?v=", + } { + if !strings.Contains(body, want) { + t.Errorf("the page does not have %q", want) + } + } + // Served to anyone, on networks that may reach nothing: the page sends no + // browser elsewhere for its fonts, and does not announce unreleased work + // in a binary that already has it. + for _, not := range []string{"fonts.googleapis.com", "next release"} { + if strings.Contains(body, not) { + t.Errorf("the page has %q", not) + } + } +} + +func TestAboutPageForADevelopmentBuild(t *testing.T) { + _, body := get(t, About("v1.2.3-4-gabcdef"), "http://llmgw.example/about", nil) + if strings.Contains(body, "/releases/download/v1.2.3-4") || strings.Contains(body, `class="dl"`) { + t.Error("a development build links to release files that do not exist") + } + if !strings.Contains(body, "development build (v1.2.3-4-gabcdef)") { + t.Error("a development build does not say what it is") + } +} + +func TestAboutPageAsTheWebsite(t *testing.T) { + d := NewAboutData("v1.2.3") + d.Site, d.Date = true, "1 January 2027" + var b bytes.Buffer + if err := RenderAbout(&b, d); err != nil { + t.Fatal(err) + } + body := b.String() + for _, want := range []string{"fonts.googleapis.com", "Released 1 January 2027", "next release"} { + if !strings.Contains(body, want) { + t.Errorf("the website does not have %q", want) + } + } + for _, not := range []string{"", "This gateway", "/_static/"} { + if strings.Contains(body, not) { + t.Errorf("the website has %q", not) + } + } +} + +func TestAboutProxyConfigsMatchDeploy(t *testing.T) { + for _, name := range []string{"Caddyfile", "nginx.conf"} { + want, err := os.ReadFile("../../deploy/proxy/" + name) + if err != nil { + t.Fatal(err) + } + got, err := proxyConfigs.ReadFile("proxy/" + name) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(got, want) { + t.Errorf("internal/web/proxy/%s differs from deploy/proxy/%[1]s: copy it over", name) + } + } +} diff --git a/internal/web/proxy/Caddyfile b/internal/web/proxy/Caddyfile new file mode 100644 index 0000000..a27034e --- /dev/null +++ b/internal/web/proxy/Caddyfile @@ -0,0 +1,41 @@ +# llmgw behind Caddy: the client-facing port (8080) on a public name, with a +# certificate Caddy obtains and renews by itself. +# +# Replace llm.example.com, point its DNS at this machine, open 80 and 443, and +# run: caddy run --config /etc/caddy/Caddyfile +# +# Only 8080 goes through here. 7443 (agents) is mutual TLS with the cluster's +# own authority and must reach llmgw directly; 9090 and 9091 stay private. + +llm.example.com { + # The router reads at most 32 MiB of body (router.max_body_bytes). Refusing + # more here gives the client a 413 before the upload, not after it. + request_body { + max_size 32MB + } + + reverse_proxy 127.0.0.1:8080 { + # Tokens are written the moment they are generated. Without this a + # streamed reply can arrive in bursts, and a client measuring time to + # first token measures the proxy instead. + flush_interval -1 + + # Caddy sets X-Forwarded-Proto and X-Forwarded-Host itself and, with + # no trusted_proxies, discards whatever the client sent. llmgw relies + # on that: the proto decides whether session cookies are Secure, and + # the host is the base URL the landing page tells people to use. + # Behind a load balancer of your own, name it in trusted_proxies. + + transport http { + # A long generation can be silent for a while before the first + # token. llmgw has its own limits (timeouts.*); this must not be + # the shorter one. + response_header_timeout 15m + } + } + + # No `encode` on purpose: compressing a stream buffers it. + + # Access log to stderr, which under systemd is the journal. + log +} diff --git a/internal/web/proxy/nginx.conf b/internal/web/proxy/nginx.conf new file mode 100644 index 0000000..29157aa --- /dev/null +++ b/internal/web/proxy/nginx.conf @@ -0,0 +1,63 @@ +# llmgw behind nginx: the client-facing port (8080) on a public name. +# +# Put this in /etc/nginx/sites-available/llmgw (or conf.d/llmgw.conf), replace +# llm.example.com, and get a certificate — certbot --nginx -d llm.example.com +# fills in the ssl_ lines below. Then: nginx -t && systemctl reload nginx +# +# Only 8080 goes through here. 7443 (agents) is mutual TLS with the cluster's +# own authority and must reach llmgw directly; 9090 and 9091 stay private. + +upstream llmgw { + server 127.0.0.1:8080; + keepalive 32; +} + +server { + listen 80; + listen [::]:80; + server_name llm.example.com; + return 301 https://$host$request_uri; +} + +server { + # `listen ... http2` rather than `http2 on;`: the latter needs nginx + # 1.25.1, and Ubuntu 22.04 and Debian 12 ship older ones. Newer nginx + # accepts this form with a deprecation warning. + listen 443 ssl http2; + listen [::]:443 ssl http2; + server_name llm.example.com; + + ssl_certificate /etc/letsencrypt/live/llm.example.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/llm.example.com/privkey.pem; + + # The router reads at most 32 MiB of body (router.max_body_bytes). + client_max_body_size 32m; + + location / { + proxy_pass http://llmgw; + proxy_http_version 1.1; + proxy_set_header Connection ""; + + # Set, never appended: llmgw decides from X-Forwarded-Proto whether + # session cookies are Secure, and builds the base URL the landing page + # shows from X-Forwarded-Host. A value passed through from the client + # would be the client's choice. + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + # Streamed replies: tokens go out as they are generated. Buffering + # turns a stream into one late burst, and gzip buffers too. + proxy_buffering off; + proxy_cache off; + gzip off; + + # nginx's default is 60 seconds between two reads from upstream. A + # large model can think longer than that before its first token, and + # the client then sees a 504 for a request that was about to succeed. + # llmgw has its own limits (timeouts.*); this must not be the shorter. + proxy_read_timeout 15m; + proxy_send_timeout 15m; + } +} diff --git a/internal/web/static/fonts/NOTICE b/internal/web/static/fonts/NOTICE new file mode 100644 index 0000000..fa218e6 --- /dev/null +++ b/internal/web/static/fonts/NOTICE @@ -0,0 +1,17 @@ +Fonts for the /about page, vendored rather than loaded from Google Fonts: this +gateway makes no outbound requests of its own, and a page served to anyone who +can reach it should not send their browser to a third party either. + + archivo-latin.woff2 Archivo, variable (width 112–125%, weight 600–800) + plex-sans-latin.woff2 IBM Plex Sans, variable weight + plex-mono-400-latin.woff2 IBM Plex Mono Regular + plex-mono-500-latin.woff2 IBM Plex Mono Medium + +The Latin subsets as Google Fonts serves them, unmodified. Both families are +under the SIL Open Font License 1.1: OFL-Archivo.txt, OFL-IBMPlex.txt. + +sha256: + 4c98b9d490d1698ec95f2ff17a6c7d0e72691864c0c5d7bc2a2c161b45afe5ad archivo-latin.woff2 + c36f509c0a8f9f85f29cb44bc8701d8a9e0b14c499e77a884f789ead7093a7ac plex-mono-400-latin.woff2 + a76f53ca6612e7b3828eec2311098675b7f9849ae4169a8bcef6302aec02a6c0 plex-mono-500-latin.woff2 + 056e4e2459f57a0033c8c9c844ff19d6e42ac8602027803d4345823bcc939818 plex-sans-latin.woff2 diff --git a/internal/web/static/fonts/OFL-Archivo.txt b/internal/web/static/fonts/OFL-Archivo.txt new file mode 100644 index 0000000..8597481 --- /dev/null +++ b/internal/web/static/fonts/OFL-Archivo.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Archivo Project Authors (https://github.com/Omnibus-Type/Archivo) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/internal/web/static/fonts/OFL-IBMPlex.txt b/internal/web/static/fonts/OFL-IBMPlex.txt new file mode 100644 index 0000000..c35c4c6 --- /dev/null +++ b/internal/web/static/fonts/OFL-IBMPlex.txt @@ -0,0 +1,93 @@ +Copyright © 2017 IBM Corp. with Reserved Font Name "Plex" + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/internal/web/static/fonts/archivo-latin.woff2 b/internal/web/static/fonts/archivo-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7af3f7db56708079e71cc2c265b3889d7f4649a6 GIT binary patch literal 90096 zcmV(?K-a%_Pew8T0RR910blR{6951J15Stl0bhIo0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/internal/web/static/fonts/plex-mono-400-latin.woff2 b/internal/web/static/fonts/plex-mono-400-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..52b6c7595dd5e2106676e7c52fcff18539607879 GIT binary patch literal 10052 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 literal 0 HcmV?d00001 diff --git a/internal/web/static/fonts/plex-mono-500-latin.woff2 b/internal/web/static/fonts/plex-mono-500-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3308bce2432c298817ed344eeac33007c83cecd0 GIT binary patch literal 10060 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

@c9dd0tdWKJRyVy<;N5h+G* zUvR>0Odo!%*(19MVJ91CHddx7?x}t!&Ic)C`r358v9JfxSvMB=mb~C7Y{K~Lj#eEHiKzY38`l-HsDB#VWt0;9YPi=JP(*S8Dpx0AFCI; zhuN7s)vH}Qf5~~q*Xy5bZZBlb5TI2ieQ-ms1+X731K}Uz=L36hQ zs7QT8w8Ns4ERuXL7MBSOpnn@Z4ea<2<0l&b1|n4a69fbQdnS8eCyotf9U%eDK56R) zkJcmPaYft7I}Ca#iY6KZQMfdpOExW315N1K2CFz7uqrEFZbl2P#J=0sx(<%e`DVt1P*P1oDw~NrL<4O8f zIlnW8C(x;8znH8CyW?WKY$|)zrstfzHn(2!6$!oAu+Zz8ne0w074$lI%BkW0ZgSxN z_B^ycG)JNO^8dEw#JS_cssul5Rm{zIQSNY-2rqHLj2ZsEOrr;vlt{Zr_oluB&c!_g z>+eot<59g(9qH-ILnEYCS{Hg43DF71?H z?C3vbTbY+CVO_y7U8yv_n4#k`uCxR4w~FPe-kQ;7whLFDf?d=#$2GW^nbRB}Ap(Il zv7FUOh=`aBfr4W;a61yJG3O-u~E3wbR=e55CJ!)zeFMhM87leerZ|hMN{AAb&VRqO_U3gGyTF4yEa? z={1wKq6SuEuFH3x-#=Td=eyWC(;#N7)#DEn$H{V@RpM{sMCY)Br_-(9Q56e`QFmjk zJZU>Xjyi1*xv(<0QeK`;NUDHC?cDvp>qgfZ371iu-#A^Jv z0!O6Qe?t-cD`LK)LjLl~^3^WCdhNP8ej-cj(RVwVJ!d0#!%LG1k=wjIb`7?EqIyf$ zL5m^q))AUWqb0szek_x!{jqYJOk#>NoDGViUW53p>4R;s4y|k&?9bE9UEhNI!^z@I z5Oa_7sbF;+Zn#6Df~$=33I1~Vc;5o7a*L(7fERaJ$KGS0AI#VFvdv`yOT==B1A-5{ zN}SX!Rv9ae^6}+<`2@NdRSwB;T%bdTxCMknBdim;{DXAEaiB$P8^2)kWcv%P&0T2@ znCRDFfy8PHArZ4JY?WC=&ZVGn8V^B zo5MnTpx-{XmducpILvn5?to&KB9Hudq3-`YWwqni_<1qE)-jyE`hO3cx`u~*pG=?$ zT!1LF-in4Qr?*x(&@?^?*QW|MIh1&G~yV_)&jPv3^V8(23K&3KimFT38 zEX|eg`Uw@dvhaeHHTzFpD5}{?aFy)=zlHGjvle()xxj{KoHu|=yrx$KrB=)hm%-$T zc*i3uR7V?=D?VmfRF+~|hk(vGXP6L>L$oxRwB!AL6Mnem8bDB^&*OLaZ)GFwUkL66 z5IA<)8^~rKMP3K?Hl2Q*mySP*)0eSY5Pu?6UPkS)cYSYO@)*uH6>Uam(%|TR3Wl`g{ zFGr#y$2WsTakvMt*668`|qT7s}KRyT8K)6lw!F>@5LnRt+Gau8JZJqu5FS-RWX zE#1>y;U)H^+OR?vw~VsLYQl2uQjoay{#HlmnaN@LJp{gq>+5m2o=F@MKySbvtb@J5 znSOgu`xtxAXXVkVDFM0};f<>*HI-Cq6b+V<7DYq6*d+7NrDlbt+wr0iWa?}5fxdvU zMj7Y>0Ww-Eu0{9T0BU*>yiOj9igmu)a2o0yxUx&7))~#)-++nVq1v{mKN9tB0(Qvw zi*FZW`B`6ppQk+GBY2>)Z^W#>&C~J7bVXbH{MXv?+A$j?8zuT+`1Wgn_;|mf8~Z=0 zzpv(ufEr?~!*A_R#pxz6?fEw+J?uyu~F47JiZJ+x;hMUE4TDU9iCzw2F8Uw@qh=$ zVs+RuPiS{U#_5IqLq57R!nBCg(+vN}I>wjQjP6+S?NUt}#)it*n^8IJaGFb!3{I274~}`~_#DhfQ=ZqO^?}zPu6bMGw|n#DgOU>yeR7t* zQlY9wkfO#WtwZZ$eCB?=8J3q?9ZpM%#o@F{Yr|+Vc^VKBZB4LdTzQ$W(=jp>>Tb2G zTAC~qGQGys({Jtc6$)kCgcLV57Na&XOlKG+NfL$;ri*V*0Z5LejO5RBo;>LQ0-|TA zQa!lX>JHpVs)Yl3@0hBlCbPWyY}Y2;saV$H0BKQrY<7=Pm!vP0VASO4Nx&? zY=0IY^@izj4s~nd3IPK zSMfb!iO}g2s^tzg-y{Z^X7G&$b?b<0@mEPm7Ak_Al``Y4yBR5HMV zE8HO#dnA$?hf@;wNW|jSb2!8zE!>(Xk;Kcz5%0`7wveq|7L16;T69)ndwFoQ*qU;f zd9|frA~k%Cr4lK}Jx=Q_`rnY0x=p8s#9^ zy%su1P3KC6tT*4bjZz9o>D2S!WTlO41GE0n&QsHQlG^p=TlP^3At{}D5ae`=UfcGa zFMQ)We?73l^;X~BxflZ!pCv*5DFF7AMo#6ZxLm@YK)X#1$r$w=P`@k(xn=^G7-;(g;FV-g!#v#f8Z3o;>l0ney{HRmk|#ks5nN! zwY)ioiRVZDHR>{l$se<8iNM!hQGve>-&2Rxil|z)7z?Y^2x2DMiNlFt7FoG09O)T8 zJhEn4sIqEl$kmMZEDcxc%EnpD6Uy{uH*s53c5_OD&1IqHNHo+`CO1k5UtTN87hDw@ z1=j?S_n8lm$iPdUI;v7tYIUj#H`G}m>$IxMU|5U@3Q=x0_aM%%5Q{7~g73HFInmq; zv4YGzawS0;5D7dIDY1{tPU&Mx!M5}AXED)3QFQN9Nlq!!fi-vNbHq~<{5XI2tmFLq z6*Mli!o%>@>3guBgXKgq-wW};(>94K+isZ*;iD3%vm`6#pf!QuFxp5pA5b#ajd*)G5ILT7F-Rt!jKC+i0M_=Fd9z>knuiMWghS1T_<-cL z9Qqu&2wcbVE!j)z>pwO(zaL;KEHwT7qJJ#)C6&v@f9vC!v?y$v#c@!3I+Z{=5^avA z)_guhs*Uigb>I=dTw%sXK`1!MWU|QfKMkf1BJ?-r#{Krp3 z8)KS~YPb*y8)0v}is(u(nRkQn+GkL1!Uj=jtahb6Ql!cPNUAyiFpzXGE#&%*=pF?{MoxtXtc<23rS2Wn7!e zppUgkLE={h3(6PlGVh8D($#0G+Ns5F@u|EQyPnz^#YaNNdG}w~|F7Zr^#E-zTg(an zcCt9l(!%3>s%Mcw-On?xe^i(MEk}ip&W;AytoCv6A%g0muTWc7QI5)`NDa&0AT8?E z$sU)#*Hr3Ior(Lq+M`7;y>_J~-q%S`5ZK^Sz-1Oz>$>SG*>3vD=qUFxv;x8kW+9?gCX0*XrG}`4d z;oE}BjEa}C<(8%oWkpXcvZp2?X3~?K^qh%;znG}RBxPFu5*%HN)Fdg*zs$lZ0A8a3 zWBC}sQ+UW!K9dqHvRZvS8|8-**Yi^YBdIaGNz0_UIY9NHJ#S*_!c^jJ(fH z+1da>llEz4hz4@BX71Iwuh9Hit8P^+b6_@rA3`II>eBTE8qRM-eA;A1xn-UxC4x$b2;v89ED$y zKko9Hq)Rf5T_$4P_?wcI%aysc#-i)oyI1BhIPp9}elte|Qf+$MKIOVUgKsrb&4Gis z8BYMCSN?5E2YyA%P+IirA_t17j*|~P9LnGXXn3fcL%q9IopuJ41eonEvq~5>ny~>y zaLF+ljhiU+f=Ki}$~E6_i5m`*iw!H$*Q0rR`ef z$Odfoz?AIeVDS&d9u;v96rJt3zEEadKET_podhU9P}0Wv^rN$=b;{M^MzBSHc@{Bi zIfdF4KkF`#I3(Jr>)(*1% zKq+&wQnTg^8WWCJpU_iy6`)*N*p_Ghe$xT#uBh*Q@KlBs33E#;^h>P6HdeXa|xVBU+goIE^ zq9*Q5RCBDcgG@=rZlbB!1eq-vqII+yzdU8O|C{tT?VvK!nRESeUws751YEHF`oQv0 z{ihFbI)lXTg5XXqM~$o#^aVg|adE9*3Xjieqw;`|Jo7dicZfedlpf6M50Y$lu@Idz zb|8k_j5yqZI5d5D#YBf9MoF!WmI=;}vO~S-{8}X&aRx;W)Xc-K`qYaCe6LjhwqnMT z;-~;(Ak6|EHR7ZH%PM*imP<9zK!a9M;!UD0_~YJ`o*(6|dc1^JKjuA9-B%aniTxhV z+|+3*oOwPu6JGlG^fAlmS<2&?5AC`D$9zHTEm#{TB=PQz{R)^{B>ULT#HS`GJD;9; zr9&pF0Z9;*$1^wWnu=o@Ah-5eO+eWueXt?uZO_~sJd$`Fo2&6y%cn5Eo*wDEg)gf9 zc!$CmIS}ic5K)1vIfX#3;fs-VOFCS;|0g!)*4Z0Yu9Fu%+4@W0dWC!y_S3j5+O)yZ zAI0C`h`rYMGJn2#)15SbFfk+Xs(8M&v;E_w9OK3ISKAl;?@nHroRurgH5K-DTI9E- z59Qv#2pGnP=WwL%>VZMU-d|Jl=ZhtEMiSx1elL5EAZ_D^&g7pw| z-~j%4VDrH71Go5p?*IGIN5{>uK;O;uXU@uhIsd!)|2qEkc89-rBq?DnQJ(LU73@Vpe zL=8~KQ4dqEQh&=$%~j=AFL*<1rro8z zru_#IAqvEYG!O~}pjv1G)Cnzt)VKrWldmpvX-#cvA$s)V4Y$8!g|X3hmB`XX3u5c<1jc)ZtHburYFIzNc~*;-u* z^iJ{Bk)$+rPsTEKGse=Y^7k1C^JCJJ-K*1{ODE1Z4miOX@4Wi+cjGcn+F701j)^rr zW}$o{ff@I6{RRW)nbbu3)*_ucz7J~(UsGP^ekR+XUSl)ujjapB!k|Oi+urfVt}i!N z#sE)oj}f|u3zD>98%t%PSn*7@c6frJ{L$_yGl?GfHIjW2@`D?Fz9Nwwq}wE&RM8UU33o?&kyKQofJC>~Uqz6U0W=ixjl zF`6kPxG>Fkb!fa^n~t%0dNDc#CRP|HGO4yM(MI9`g8m7*Jds%9k*#q~j~U*XD?v{9 zyXWuO*NC5TY;TANWTRo5<+y1WrO_>$b3-t81DQEt@++~&%ZR7?WIoUN>5=IyP?LNpQPY>11O*I3jHaDU14+oQic(|i-F}+w zU$YVbAMkM#8F?9o%e5#SU|@9FK*#e4p>Jy;SYRD(bePE^{ZyPX;-a`;%dA&$be52s zhv}F{(lVKm{l|pZn49w_s0r8~xtMY(qvc8xST5b9JK6V?+F9)obp=Oh^u^5^HFdKW zH?M2rW)SIhrR{jd(TW$yAgwSx!J%{*mVD8_)1O$9Yb|zhvjq79O2Z!Fp420z9E3Qq zx=+2GTb7;=qOvO;aJWWA15+hW!aPZ+i7_WwKfBXE6opgZ#aRPWCL|e7NXDYDw~0tx zae*>-);McTw^bOBP%^#aC>D1BQbL3vf`C*|sXx8f+;-=-lIdSmU<40NEOKf;%!6t+ znt5A#XBfu}Yu5^2XEA8Z)Jnd9Wb}Sry9@iy({GRVF?0BdwB^R2J7d zmzaq$vN)Ox3SEX5s%nFc!i+#|Rtu395|zAr18asm-^QVg5ag@%=@#gPf-V0b1_$&o z)`WPHIIFF%wRmOsB&5VBBAM;mNt`(u-?ao%8LRAxq8`M)Y}Q+nrn>7LWeEL#Ak@~Y z$r$&8zJr5nm*<+IJu6#lT|!Xuq3voMZwswn$gVTEQ?hnV?!IP+RB)R%z01Ozk}ZDO z5q>4i$V$^EPe#f;v^@>9Ewpwa+YKHn_q~y-O+T+|rZdI1QRQ9hEg7`*a0#{nF2r#d zL{8c3^3Xy>9x<{aGcFS(I1?(@0IwAm_-;1cgV>p)0XCH~M0k_>R$_1QOfeW1MR#Xi z>g49c!l9J1L!S;M57-RYf^8*$Fi2X>He%7L69X>qsX(P!RT@5FW)y%ad=!Ka1#}UH z<6`LOF%V$y->*36j-|e`fZP?B3QiN;z^z!SY&mYFBP`|T1h{B*mi_DMTTb^`S!tyK-tY?md95p*QF0A-1ycrkkN=;@%_>x~D!sK_cybrf{TjynzXY%vT-SbI_u!embf zq5KkeDevXNmWcQFjGltgfvCr6$;%TB?m_1ikdyQ!;7da{`?q9Fasd9|=hZ>RUU8%Z zwpP++oQ?M>m+d!>B?54HerqOmf5P5VcZpLHBRl3$-Sw8t8$lX$oY3 z0**^`d`~;BPUb6U;NXEjJ{#evfol-W+!`+PT3SY^==5zr#sMXAMlhv0(UVGx2k@6y z$-9%jsLkNVre%jY@IFK(?n3^U?!rzi!%|qw&TI`F!OjaWb=_SVgkuI*{=dbt4FN-$ zcjM}HGSw~AJn!N%@n)T|SvIxR%|D8Mg=YO19{;%?{a5Pi8dLHzi z`WW)9c6+`T^a-xu`n?ccgZ+0h^NqFlg1b=NdiS(&np0Q@eacqAKOeC_f|JI?_d8~N zN7OdY4s3^F-wF#vrt&*?R(=?Ca`2iSe5V%S%%MCWtM*fM8A6ZJDOKT_G`iXTaPB?Q-P%E{id~=ddw02k3Sx{ z=Inf}&`tb*&m9}IF(dFV#Virk_5CT_`tl_)PtG3uiCxF@j{KGV^mD|H3Vh7g5O~(6 z6XDps{yzHi5(xm8aLa-Ly??tQX4far++O|b?XRol&Nm0YS5If6FADGK z9*n_w+ui>yg647oy?9W6;tlFxNF#w+vS0bz40T(^3o9A+L$|=;41K0&GgTio zAq7K)6R#DHj$Z>2{HU@M&npgzni)IP;-V-=7v!G6;{^g6LdEt&MV^b;rIziki+N7A znHrzY6=26}B?gq%I{;y4J&dDk9|7s8gshgLSUF@CUR6}>R4OhWe8I=7f$11SSp&Ht z7l{&1E5tUkc3^KnAEY=V7~wSWp?YCBh8Y`A56Vb$IPN~GMJy}`4Qylu$!?^h>>I?) zL}FFEa4cYBjn&S-6Kt=v&R~H6`md~zM>sk&Z+~g*F9ltx_Oah1|Cz+-h+F**V%(!@ z4-ky43V3zX*q9y^nm^=@`le@=DKMuDkd61U!Tu@G=LV=xmd{|VCFkB0GzJ{PsR;%V zd@GrMr){@&yF@)U@4W^#7kB2(Q&*kP=MPpt4HgFtqH!Ll&D6iwj^8y)WETSJi`#Sd zRG*NY363D9813bdYkc*(g}_u-xTbTN-Dwtd)>f;ptyqcLvAF`T3c#T7`-p_9EFvT+ za`ob1EFV{{J)K=F$LNx5*VsVc7`Pya#v7?x0=A>oKwqOrXFT|Z+(51sOFmAtx={lv zR+u4KLe$p!^rf3$sh-KRi39rCg#(5r_0W1?Ka&*Li`c68vvBxs@!dzOA(&!VrugR% z9Y6EsV+dBkZK>7mT-Yyq__eMGrPUt}%)WrJvL@YM2| z?7;ZB{=JLe+ePl(h}rTUyk9v3Z&S#jk&@3>S5gULrS_5B_iEF)0N+d6fZ?sw#AzMx z=mdr-FbJbWaT5{jzw6=>ssL-BOiI=SO`Z+*#2JU;*#CQelc)Ur<3U-_rHZ!X;mN0tV$wcG3P8&`q4-G*ZbG*bxj|WXD{ZJ$1Z?x<+HnX zy*4>_`0$3=RY53(dhMErCOEXME1gy7euN@jAy!wjR;8h(14tWX9E_6)W1w{CKZ@*1 z_&Ip_ym%XY9Y__{Ypn{ zR7LkJ_U*b87IhZv6U3+(0jT_5Y#7Z)``G9>$kf2wtyf>&ii zDfi6vo6X#oZO74YapC0! zkJ=4cvcDxU*#fdGU;N&w7>o6`P0KK}mce-}31~lmR8a5J`Kh95Ey{88vvJFvxyxxu z)rTrFGiGpu2HvjWMWE&nqi?~hAZWQs4^4ECVI4T}z+iz`9^F+)5e5RLPL>2b_@sV@ zkB{p9&={R`HOMk&2u#8}myzEga`pDDY{Dy`z|>}aqiN7Tfj2zK9w%$~zsYrt82453 zS)=M^P8c(w_Y8EuQ8v1PRwuZx%o99Z25Gc>5-!#7e4&ts%{rn;K`9DGU3}1A(BGG^ z1gU)6qjuI0+MvA+)_)$8{~pd9QhXb5dL;k+`487wo@eT%zNXyM$3gOBlDDt`|62we z!Exi!)jQ;Wq#I7J{}{}Sx@%3mJC&_NmutP;BS*IDz8!}TZ|{+nDB3nF`riNKx0Y}d zk@!BFTyAjR5lhi{G5rzn|B|t9MiOM~o6HG!75@Lh+9(4EzZovE{I9=(+t2;){Nc9w zKlq*k55Dh}9#7aVeddld_Cp5q=CvOnZ^!BaSilN8!sSq__zj;KD-hxzEbHjiDrl1l zdl-Ejlwcg{_r5moG3b}Cd=qGX5G(mS>8Sm}9WWEI`C3+g@c)EWd;}Cf@T1y)EbTw$ zK5fzq;5-4r;O(h~@^x{(0z;H5C`ab$c|}MA`PFI+AxSlr*U0K5(iRLfXkORP##=kt z0G^Q-x2NZ;jA|5_5gZ)>F|ZU84*Cx|3MmBkq!;0{=??!&;n(wibx>h%X(IFFq_89~ z1j9(HOX!~EUf;U#wX#SxTjP6A&$_~BT7|Jp8_fCk_T$6P8|lwE=l;9xf8XBe9m8ZY zxfznC8Jf3>PT@*DKM{^0q+mlc*2-n@8UsIY$`_c(-SMP|IghX+5rmX|%L^8ok`Ntw z8XX2M&Gf|DATeZiWaFZ0`}{wWXByo!dnWZ}km5>FqDQ>VR}kwI&vqO+P{iB!3;*4Ft}o3B9X z$jjva&db4Md%<@V<%EH&Lp*Hz*d3WkgM!L zqkKD}-=7nb$Z-%tS`F$V=u(T6|JJAvYcaYwE;Ipxs!4<56 z)t;J@z75tl3>nHKP*luD$c@qzQ1mnv!G4uG;OH?5!BGqI8EuSnkR8|__)oee*nlBi zqyH)!ega0K;Jh-b7|&&B&x6^BXqSwdYnu{EZQG+MFroJM5vFMj{?w=iZaqa+a5$kJ zIKJnZP}wuE)&n6@qnYpy36l7QRBh1pNuV)hqm+5NS0@0%&i@blUAH z?RmEpYtn87Fn-^tr-x7igGNmUg>aME@o?XHq~C?tO-cY`7VTQFC9^EdpnEYAX7M1@7J#sy81^qo94)d(wHEw@(rH6gKnN)Ec3bbC6wW3`@o# zQG#Mn+cJX19ga8y^x6|9C*f+Tnklw{9?!kiVEv^o;1$V~29sVaI>A&>RyGV8#4|Z> zLiBF9dYV5WIHgYoovhOzVo`*`F-`Gi5$er?>RgvMalPN;-9`fjR^&G^<0Pl{sFT`P z9-fWE23o1i6RCmF=K`5C(9p7T$0FM{*cM8}c0N3x%ES$Y%zAQrUgvNDuJ}`HWg@9H z=4wz7&f`E;RLzzdDtt2q^@g73y2sQ;YN~`YMwT+0tyoDhnFT#J&4byw9YH~g;e1L? zAmb}UoJQy_Ny&tiNiq$A$~sR*8^FdKp*}~Z&CX#b5V!ccahWs=wpuK93v#=!pL%$5 z{u`72n=>YjybajEHbfkU9CY8kycROjWa3iPBzN7LRG^(ydd8&}%Go01Y!88xA{~J6 z?yRd1=ooHJQ$#RK_=2h-!XE2MlE^8nKs9i_X*jL(?s$uK{zC@Gs5QK>Et8->b1Wz+b2sdY~Y>1sIUsjFEpph@59*$#*n z{TQ@6b~|^4wym(Rz91;_yAFP<*H5zG5%_zX8G#IrDR_J;+&6Hp9N2+fIiN?Y(AXCD zM4s|i%BYNf{rtZ_?P!KhqgA^@99?RiQzlrI>Arm*`cY%$EMPUnpXPB(!&bkDnMN?s zT5(?1omXQ)3qLphRU16Oxc8kpc+ZieaL1givt7WCkL~1ksufgwbL4|stKU^*JOvjG z9mx4SHpW(71WnHwh7(lt$m+-wM@DvHTfi9NYZ?PVPtd_wtJ)k3g9d^P*p!22W-(1Y zrKkvOAmvG5;4AI$UEj-w!$&_sN@bCYo&|aokR_ojoyfL!EZQCUH639&Uu!gKonBuz zaKCQ^5MuxJLG0;x=Up377U^C*C~MyF*Iw|=*0AEK%5CG$#oKQ# zK!U~KP0``xh*W8g(}buQA3A`E1?{%5-%7~_T1vfud#pDj0E8c?qnq-D{sOAPUGym3 zJMv9)vc+80WJ&!1!=wr5E=&wg;Ix1E+cBD*wyf=}gNPu5_dcn=b)4Fl`0Bh?UF9Xe zD8si-Xm@`eRWoQ9x;@(k!5}UrXx{;Tgq^(Y`(|2^W1gv{$MG%B7CrcO)2>0f4?HaX ztDOQt+gLYA-iq)5U(#nW0-O6p4E@+-g_hs13Ex8W**PRYf;U)3l`{+U*#CsB{$J=l zIyL<-MG1wt53MZ^n{gG8;{FU8l4D|`x1l>6{)C_my?gmh>tFN)%ws6%TJ6NW@1C5#%-s`mLwOu9?bvm znzt_$!-1ZX7=mM2u#~-GV9-4xn8GN@?{EJ?CP9oH-v{f9n{xwB@Tb?{oZc=VLVEXZ zdNe)A&bR#-rjn_3(A=+)wK7>QOkdPQu~Tg|8m*_lu_AyntM%$g;QS>m{EzwnVUFER z>`!7w^fdkbF4KILwJoq+`)vDLy?Twb@GYbeSU9ur{-FM+jP z^GPXBr8l}i(Ufx`n~!i2@`5PKqJT_1bqwiPVd|W*9!(*+E4JF;f*vHHUqQ0<_9!&s1fQ+?e!Us46`-AB(>)8KJ zm{Dr6DVAxgFuh4Lnktw^wJVk*qfZgFIEuLXWm$1q=LBb}%muFS@x|X`UKoO|9%mVf znC3~uHAB>__xmg2)y|%8ltmTSROVKxUV`#sUgt>ROnKi+I8TTj1#yZK_a84Q9`|FDVM=cr6Q|#CG?>`8oI#7dC+N9U!s;fOQzl7R0jH2mS;a zBLd)Cu{R@cCb+r?T=mltMbGP@2Wax z8icxrn!(152Dh@UBOhJ@)zJ53sMT6|*ClHbRyRmNFL7N=F;hvvSC^z!Fr;1x>4)gT(f~X#t4xF^loVx?AGYWORy!T zHV9%R=yaGH|D(OTcYljoE%1ioLK{(jL?uWxoV4PzeKgO)C)8BbpIsRXj@JA{jB4~* zfTu0k0-4^LLkZI2pd>47Tfr)_J#va-D|gQR%g%MXvJs~Ad#!4+I_aPPnpo$1Qn>iO z)&T#}ea-^})PG3+rLo&LrlRP?KgF>cMXx^XPpZZyNglDIb}txrac#Tar8A5&HH`%r zOCF0vAg6g;c>&5O!Esu{oNx9COZa|1rnTlh4IDOwQC~6d0Ul#DEM^$Mc!0%Y&f_P8 zi5MtRL>h$gW10gwz-rW?yQb%&jG|YfdYjn*Y=qSf%erl~z8~`4ROfshn0_i~So5us zWv7?!M!nJ5P>Tt1IoHu7)fONNJt+`M#t}l$g9A;W+Zm{066JzzX6{uWAyZL=1cat$ zaZs_tCzs1r3y*D;b!n@bnkni=c?7G-by$R*)|rW|dUEE`rpk4-8C4hwz5u)f&Rful z!lln2DO!W=E@RJGBipQ7P8nKr^X3HJAdal8x0<<-a_#NW_wsCK8@XBqs3?OOa1f^6 zv%1)ciHlLISTfwV(^UG=FfKhGqH9eu6XCbpzdf35d=lR``RG#x+2IGpDM1TBlbgWw zqVDMZCd`F-K6zW~;$=$PfCuW-!DD+ZxXm1FELyf+E2L|C+yEm{6=BdIes~D~uwA2# z4U!~p5;s^r5?VEpIIPjmZ5WNgXqlOybo}M6AT{|AmrNU$P`#@9SwKP<4;43)R)O5ngcM7L@Dm30<4z^~5FPvLQq`SNGaoY|ATkYntL1i(S_>eD+CH zp{nkLwZ!L<4uCqrm3WE|9R$f%tptMjJBeCMfl^9k{XyC~J-2|I#U{?UxJo8RT@3Kf zR3KVBK_D{l^=~B(?l|FQ58VS}&@sM2!7>aQw9S?`q`(>utG*x>u+I+R=fH;O;vHtQ zAH4!}Z)cnO&Fxii1mCTM#lKIUy!!7wdk%cw>y@Jn3dyp-FSPcz)s>a(0$QfDs7RVg zD`1=IkEt(iZfG!qx$r-1^k^6?Vb(jHvII8!Lz+wmV6bfK48oNw&-=G;?*UsIq~wG@ z4MhtN!k=1r=Z)?C&#zpW6)pi3Gxb5`taQO{b4WGu8@g+sku$bkadpl=qD5-BE?nQi+K@DVwTMtY=`~VzMIW|9lhT_{r4lukZ15^oLPOWru9Wh z;lS^;LTzeEw5&xJqC;nbh!j_GFXlxsDfmXf2mbejnBATQ7st*r!|+L->)1Pj@qdfv z;VXK!WYo)Fe){XC^1utcVwMvdU|Z!BC9&c)BWB1DOYBa_X*m+1Y-+_MZb`SYW9rDW z{Cy^Rjknezh%w`$06$?6sJ~XXZBIe%2PR2^nMqGXofyQN(v&0Lloi;Av*Sx*O>b}6 z*xdL!)!$y(zFj{DI0p1=cyOmO*#;L9d03?%f~sNOcb&lTHuyH_Fz@JP!wK(|28Zan zpI0S@4(3-E{}cSr0{mZf0ZdK6Xfm1{OjHU4MDQa9))4H50_G98!S>_S;sx*koK&KJ z0uItv7r4fb;t1@ATqd<-oV|Oq*)hn66WtI9B!SIPPimb2{w+ljINWsb3OG|AYuo01 zixU-F=*3mf-&>$8FY8sJvTLU$cvFWqD`^7ExC5P*()wD9=B2IYQKC&}`Py;D5bF_B z6ozFU%?n(@DnxVq?$k-0VDH+~Q}hc$0T09<4Yu(#tWyFZc?A8p%Z*Zqp5Ax9i9)+L zXAF+KHT!$jA3q1=z>GF-X+NC>B`URk@$q*J_>0@M?+}zPi%sbl-$ON&-%TNJys+ff z5j$rUM@6yKam!W!w81ijn4^I#*O6YR!>w+UhJlsY7I2*Sg`zra;1f_?FTk7_j{)~i z&VuH%#{cXa;B3@y;_$VW9{bv18wF08qr-0T_mhCDIyjn}b3ObT-PLvKu{fH!-qW`{ zoM_vtZ-n4WsN+ro%Rqumv(l!*x>c-}9sFw??VJHFZ^)@Xb) z%Lsx{enT6w)XNYN(X8oAL~$$;@R-Y+0{MrPGpQyML!dc`FAijq{gf&MT zg9+tu)V8gh^_$&y&81phaE$uh?8A<;kPo6EW@JFv2tHpc$OdX#tQO09t&-lV zt%h=E{M!(_Al#eBpH`@PepnPPuNfx-e^$8nt=$SCjp3xS9}R>Y`n!7QhlawKTgoCF z{?Nkbe@oHt_j{-`^KOQY1X%*rSktJWKpI2;=q7JRHIi~=xt`6%@KrB`>bJbvS&VW| zveg8t=@&Sqc2!zbqwSiI6RMW0Dm*8vYG)w%_(~-KiwruYXE}fBkF{kq0NSvmh?+a* zif~&(V?AH{w#IH(M*pH*W=8goNj?R(#2WItq+Q5Dbq8lM^jsHtto_W-L6^2K9a;TNw~GEZmqdU30kaj0yse97%F6NN&b1K_Et# zoWcYLXr1}7zfM^*8?|ls8F>|)4YePwrE`E1Yockbxuuy)gYx7TsJYSa4ej2usbZ}u zI;M_o5-vQX&e^6sZ;s7Cfm1v*WYXxs13YGwvwr^=-I=@Q$Jqaf7Po!+&!6W(3J9dD zOoZqbIf5%%34NAIY!X*-Ka(lHIv$@;Dbwbo@auGC`pSo zl1(foaUI<4TOdR<9zbiLAjH(IzuoIKn}6Q>o7YQiso52&efIZiI0r5%w$C{77u8JS zHktzVzIOuL8ohNI85Jd+PHep4KjV3M-C0VtqUqAFhD7>+mtw7Afw-9^)o&9=7-*x?{~WtZ{3*IpcUO%I&^%m ztcj`23E_<*1KOKzN7%!j5BfU+738I3=w)@yIFfX zYS?Vo^LBloSq%w}3k}N~4I!p^FL)8<5_z(|+F<5iTKu-HR4&)`G!~3)m@Ng}Nedo` zZkxKy8WRE)2nsX@9>(IP8AHu6l^ZIVBOsh-A0l!T!T!j zB4pnkI3H%CQEOMMk?_{LJ#CfC+L4)-^Y$?f$aqbzZQ({$;wnoarVN_5!g{yX%tm&;t?Qmke%VIr0M-5E>wkUr4d1CwV?Ng^7RQ@dvki~-*v)u7zfE<@%s)( z?kf{AN`T$4yFl z9vUHSQ7b#x-HJqi~M2r26day$`d2`9ys~WOg$6t~ewGiQ$ zt%=wTa`1Cg6t>EQ8jh~7#N6I#n)N5i2*Tuneqej&gCYat_I zrSiwf3HB>%&wB0P7`PFElBS`|fPu^Gnn>x0<2V?jxmq<-@*K-D4}Q^V)~R8%NooMW=`K#mK>K4+8~CX|VEAti4|Ec600%r2 z;_B&Q^jhU#NA7f*nBwH+7dd#3LPl08J&H|y&wNq@XBHC{5-#3mjG<^WDik&`?Uh9= z%>pG18YK0|k%EGI_ex5@&pjC#8iRHiwaA-RcG>R_iLU1LL~1(P-Ov_~lg_SlV+Td$ zT3D{y4tlk6k&iah=4*s+bRtXObRCrBf^Lw+7$3+v6=A)gm?00a=828P!j$SrM+BQ=g5C7D3)bQh=k(Y=2K zT;L?BQMCLh=z!NhQ08Gv0aO@F^+RUWTLUVaO-V7Dt^z>4Aqotv0=a14A%xMPUgI1! zvd*u*s;FG7V2(LtHv%-;e%(o5mL*nc29ypZd;kC2Zx3(BWBSq8V>wt_O1IcDGmp)V z?mmc?d9-&`IcS@+OfAQM_EB}~20`sZImOvgV}xScb$x9R^Pmyy+;EXyv+R#KjRg$;&ue5ELAOv%xCk_6n- zU7Y$2+DQR;)EX!$#)mNw#k?i4<7kJ*2)Moi?@k0^PsRflg+9@Rfr)wbdlRj8yOPH2 zOHU`@YE#+)Is&F0B0X+ddtwo5nD0^PiE76D`b!ZNz?V$T=KxPT61|df+;Qrnen5rV zdgjJ}#h*y(0QDhIp&PTzYzD`Ay-{U=v^Mu-IWT)4tR{B;YP|IT&aRDrWBX$c4Am*VDrgH$L6j!7>ih8Xp zweV~)4-_Kh93o~Syc&EKR6Zeh28;>o6t86O8_|(Vs8TZ`?kstZFk@`g#Y0;R)yjtM zdK`8YB$qVlVnY+46RyKxX1&_z5RC0_V^d`!H_8sq)MH__&(wWnkH8Ug#%0)3l%uGj zb1W!OtJh&BdmhaCexK<=928EWfgPC{uo48+JeI6uY;B+jEl6UFDWjbwBTQ|IJaR0C za8eX=b8j>?BVv9F#MOADeQ6BdFUv{h zJ73A7!g5C#e?XIVxJyvLn#$ZEz{pR(Y3j~=#hj|4O}%D%Zq{`pqael3S|MUXf#(LI zLKxrZnr6akS{4My(%R?(kW9bXB222tiWtQc56dIhf{B!B$tVTY4?{RaxSha8c2jlf zE8DY(9nXh46%(0#DUHjuIo^rewU2Ot(N~|eCap!Qk(p^Rm+tkQ_;mtfIzY3GOPXfbmKo@kk!(84G z@6jSxYb0Y$OkGOHaOcz%UK|{w(>lUH@l5`%8^%=*(>-6$YI|UMRTSAuLYY+zG2R%D zsZi4nHOYKUbG0|57MabQ3`8kL0)cbZ#SrNrNG_I#^8i{>Bzdn@C~Qj5f1-KgEU zL#3zzS6UtJ9P^mLMf%U>vtNsJ#&x)kyMBgvmKh-w*Pyj<0IJp*MGhg_3LL(qgAZSO>LNa6J zLV&!pkj&U~A@I-p$H@mtDz!cbq19=&aj5ggHrNK|kFD4S=ZkHy4L%fND^KdNYzs7K ze~s2{XFP%c{G$MrJr>JRZmJhB0RT}Ju(rtk<=B&R$BrL4^2gw-*N@M>24!2P<4Ni= zzu!6oZ|xf_Q&%mqIKpb<)1nsP|TQ48S zglbKQ5FSF@>XujjKBl4EV?LJeuAHcdu90BRD)uz!!WgacHMO zS+rf#v>S{l+0nTjrt#IIoi24(@TSg;3Sz;T3$37nzsge7yRWI81ao>|!_1pFFLeLQ zFiw?)e<>J{09e4n$YQk@m1I2J%)4w!+>e)KR->mEa7NsxFI`m66XoHn`^Iu(J5Mt) zcG3Kq&u9S*Ut4mSorn02m=#GU($s(yQXY+;T|;LA5H72g!c5}U>%H=IPFaU zHI#z!2Gi53=dqesPy&a3T6esem(^9$Fy2(ttcH(;^NjR%EhH?Na#F?0KlsqW0>R5oR0~#A5yA;n+)W4~lB3h$yb} zoaTBz)orm;fAo{Tvycz;$Q5*{iLydliTaQ<-y3~!?JVj8IzM(k&Q9{5DEe@{vSamO zZ;#&Z!kp2|Jg4>>;0DG_!1u(#Sci&kuM(beUr;3B ztz44a)f;=EYOGW>#;O{ps`?LFs162~t`Gwnwh9^=?NBusRSl-9(O1=f9|hZxhpx~> zTe2w31D{Bku6!BLGM+w>MQ4kbtv{S%pRv4gdnS5#PHn0F$h0@W5BwJ9xC1*1Uw5)3 ziF;#51Ldkkv~(SsI+=ixsY?D+3pq0fa^$2{0;nW)2=SRHt=>n@7%G}0E|aj#(Q?-5 zF2UaGgxAie4#v_y^eeb7_}_vvv171$@A*~0lX%0b>D(n4eri;V0u`f=iXowbA=%{b z?Ryem%UB@_B(ER6+!#Yq(f(0IyBHNCd8oKA>gl&jZ`2O_iLAh>wk@K$r}-=DgG5he zIm{n@o@C$Vw_^V2!?PFs{v76yK1{#y4f7o!EeZjYwcn1GTy^HG=>HYT@+H9Qlj#2d z_+)mz?1uaCuHG6;KpO%G(8T|LLHRNuAJ!Nxc9rPFo0w!a4v8SQiD3T0Ip}OBQJ=Kr76W#Do-YJf8IGI_@H^OAA z;!Go%CvzR@qvz{t{G;WcnB~A#^AVRM9`P$Sxe$~1l2zgh9O5zoe&-eIm^h3@o@f{3 zP;$5#hgXDR3ZgF%m3_p0u&ipkYqb$~^E zpix=HSHsxEQE!p}gRwibM33#Y!X&s_Ln}yHi-QiWjr2w9Vdf$B%9zjwuoP&6EaYfI zxHfAYHsZ8lbdlN!CLDqbHR=}y7wZZx(Sl2RV;V8ZKmX# z>p}t_^f8H8yeL`d8QTix`*wKS2(vESFge`pr!uQOG3?^MVke<+?~Ni(<$%Zohd++8 zQOp&pD0riab+n!1ma{jSm=t!IPnMBVe_Z?Q#BzZ*|F!qkrQXle>RG^5p(CklNWD3Ch;|y zCN0`@=+dLlfFS_}b6iD=1sLc$BOF2`LYX^ClzQQ%$DX)G>H^$(W|&x}@KYr&(_bD2 zM>oe4yX^6wY&lLjZF`7l(?I2~M!H^y^tsD~F;ma&cF`j{LbDT1o^neK)vCoXZF;Qs zOsY{v8|j+0#u}$RNj92blF24o<6qy{t4F5kw%X!_``&tOz8x0WX+KGl{jtz-6)IJ! zR-@J;=ha*6k^^ol(Cxhsmbj|Z(UAHL7z{H8V<k;xf#zK6FsSKI2WXrKot~~h)6e{|0&hVoRPB9*9IUuiA_#gtG=c`8tm zN>nCFTdd$6>8I&gUrL^Nxhj8u4oW$nH#cvSU53Kpa3Z5zI&)B-$`n(mukb}J_}dMZvfVF)!T-Myh*uQI(Q&OV literal 0 HcmV?d00001 diff --git a/internal/web/templates/about.html b/internal/web/templates/about.html new file mode 100644 index 0000000..d860719 --- /dev/null +++ b/internal/web/templates/about.html @@ -0,0 +1,531 @@ +{{define "about"}}{{if not .Site}} + + + +{{end}}llmgw +{{if .Site}} + + +{{end}} +{{if not .Site}}{{end}} + +

+
+ + + llmgw + + +
+ +
+
+

Self-hosted LLM gateway · {{.Version}}

+

One endpoint in front of your own GPUs.

+

llmgw runs vLLM, SGLang and llama.cpp across your servers and serves them + behind one OpenAI-compatible API. It knows which GPUs share an NVLink domain or an InfiniBand + fabric, and a model split across machines never straddles two.

+ +
+ $ sudo llmgw server init --admin you@example.com + +
+
+ +
+ + Clients reach one llmgw address. llmgw places a model's shards on GPUs inside one fabric at a time. + + + + openai sdk + + editor agent + + curl + + + + + + + llmgw + :8080 + + + + + nvl72 · gb200 + + + + + + + + + ib-b · h100-80g + + + + + + + + + + + + + +
A replica spanning nodes goes into one NVLink domain if one has room, otherwise onto + one InfiniBand fabric. Two fabrics that cannot see each other are never bridged: the all-reduce + would hang.
+
+
+ +
+
+
+

What it does

+

One static binary. It runs as the control plane, as the agent on every GPU + node, and as the weights mirror.

+
+
+

OpenAI API, your hardware

+

Point any OpenAI client at it. Only the base URL changes. Streaming, tool calls, + /v1/models and /v1/responses work as your client expects.

+

Placement that knows the fabric

+

Agents report GPU class, memory, NVLink peers and InfiniBand ports. Replicas go where they + fit, including ones larger than one machine, on the GPUs with the most NVLink pairs.

+

Models load when asked for

+

Keep more models in the catalog than your GPUs hold. The first request starts one, the + chat page shows it loading, and it stops again after the idle timeout.

+

Keys, budgets, rate limits

+

Organisations, teams and projects, each with limits. Priority bands decide who waits + when the cluster is full. Managers see their organisation's spend; people see their own.

+

Editors connect from the account page {{if .Site}}next release{{end}}

+

Pick Continue, Codex or Cline and a model. The page makes a key and hands over the config, + filled in, or a one-line command that writes it.

+

A chat page for quick questions {{if .Site}}next release{{end}}

+

Markdown and maths rendered, stop mid-reply, tokens per second and time to first token, + a system prompt and a temperature. The gateway keeps no conversations.

+

A mirror you browse {{if .Site}}next release{{end}}

+

Explore what is trending on Hugging Face, read a model card under its row, and download + once for the whole cluster. Only what your nodes can run is shown by default.

+

A dashboard with nothing to set up

+

/admin shows capacity per GPU class, CPU and memory per node, who is using + what, each node's page and logs. It fits a phone. Prometheus is optional.

+
+
+
+ +
+
+
+

InfiniBand and NVLink, several of each

+

A site may have independent InfiniBand fabrics, eight-GPU HGX boards and NVL72 + racks side by side. llmgw tells them apart by what the adapters report, not by what a config + file calls them.

+ {{if .Site}}

next release Everything in this section is on main + and ships in the next release.

{{end}} +

Fabrics and NVLink guide

+
+
+
+
1

One NVLink domain

NVL72 or NVLink Switch. Every card joined, IMEX up. + Shards get NCCL_MNNVL_ENABLE=1.

+
2

One InfiniBand or RoCE fabric

Nodes under one leaf first, nodes with a + degraded cable last.

+
×

Never across two

Two fabrics given one name are placed as + two, and the cluster page says so.

+
+
+

Check a node in one command

+
$ sudo llmgw doctor
+FAIL  nvlink  this machine has NVSwitch but nvidia-fabricmanager is inactive
+              → systemctl enable --now nvidia-fabricmanager
+WARN  fabric  nvidia_peermem is not loaded: GPUDirect RDMA is off
+              → modprobe nvidia_peermem
+OK    gpu     8 GPUs: 8× NVIDIA H100 80GB HBM3
+OK    nvlink  NVLink groups: [0 1 2 3 4 5 6 7]
+OK    fabric  mlx5_0/1 ACTIVE at 400 Gb/s (InfiniBand), subnet manager 0x248a07030030f0c0
+OK    fabric  subnet managers: 0x…f0c0 (master, priority 15), 0x…f1d4 (standby, priority 14)
+OK    agent   NCCL bootstraps over ens3 (10.1.0.21)
+
+
    +
  • Subnet managers, watchedMaster, priority, standbys and failovers per fabric. + A fabric with no standby is flagged. llmgw does not run one.
  • +
  • A map of each fabric/admin/fabrics draws switches in tiers, + cables coloured by rate, degraded ones in red, and live traffic on your adapters.
  • +
  • NVLink domains as racks/admin/nvlink shows which trays are + joined, whose IMEX is down, which link runs degraded.
  • +
  • Ports re-read every heartbeatA port that goes down takes its fabric off the + node within seconds. Counters and rates are exported to Prometheus.
  • +
+
+
+
+ +
+
+
+

From nothing to a first request

+

Debian, Ubuntu or RHEL 10. NVIDIA drivers and the InfiniBand stack are + yours to install; llmgw does the rest.

+

The full guide + covers the mirror, GPUs and what to do when something does not work.

+
+
    +
  1. +

    Put the binary on every machine

    +

    Static, no dependencies, the same file everywhere.

    +
    VERSION={{or .Release "vX.Y.Z"}}{{if not .Release}}   # from the releases page{{end}}
    +U=https://gitea.mynodes.xyz/ilker/llmgw/releases/download/$VERSION
    +curl -fsSLO $U/llmgw-$VERSION-linux-amd64
    +curl -fsSL  $U/checksums.txt | sha256sum -c --ignore-missing
    +sudo install -m0755 llmgw-$VERSION-linux-amd64 /usr/local/bin/llmgw
    +
  2. +
  3. +

    Set up the control plane

    +

    Creates the user, the certificate authority, the certificate, server.yaml + and your administrator account, then starts the service. Safe to run again. + Add --host for any name nodes use that the machine cannot see itself.

    +
    sudo llmgw server init --admin you@example.com
    +
  4. +
  5. +

    Add a node

    +

    From the control plane, which holds the authority. The node gets its certificate, + the binary and the agent, and installs its engine by itself.

    +
    deploy/bootstrap/onboard-node.sh --node gpu01 --addr 10.0.0.141 \
    +  --server https://10.0.0.140:7443 --fabric ib-a:mlx5_0,mlx5_1
    +
    $ llmgw ctl nodes
    +NODE   STATE  GPUS      MEM   CLASSES   FABRICS  REPLICAS  LAST SEEN
    +gpu01  ready  8/8 free  503G  h100-80g  ib-a     0         2s
    +
  6. +
  7. +

    Add a model and send a request

    +

    No restart. If it does not place, llmgw ctl explain-placement names every + node and why it was turned down.

    +
    llmgw ctl model add -f qwen-coder-3b.yaml
    +
    +curl https://llm.example.com/v1/chat/completions \
    +  -H "Authorization: Bearer $LLMGW_API_KEY" \
    +  -H "Content-Type: application/json" \
    +  -d '{"model": "coder", "messages": [{"role": "user", "content": "hello"}]}'
    +
  8. +
+
+
+ +
+
+
+

Behind a reverse proxy

+

Port 8080 is plain HTTP. Put it behind Caddy or nginx with a public + certificate. Only 8080 goes through the proxy: agents reach 7443 directly, because it is + mutual TLS with the cluster's own authority.

+

Bind llmgw to loopback when the proxy is on the same machine: + listen: "127.0.0.1:8080".

+
+
+ + + +
+

Obtains and renews its own certificate. Replace llm.example.com. + Caddyfile

+
{{.Caddy}}
+
+
+

Certificate from certbot --nginx. Works on nginx 1.18 and later. + nginx.conf

+
{{.Nginx}}
+
+
    +
  • Streams are not bufferedTokens reach the client as they are generated, not in one burst at the end.
  • +
  • The read timeout outlasts the modelnginx's 60-second default turns a slow first token into a 504.
  • +
  • Forwarded headers are set, not passed onllmgw marks session cookies Secure from X-Forwarded-Proto and shows X-Forwarded-Host as the base URL.
  • +
  • Body limit matches the router32 MiB, so an oversized request is refused before it is uploaded.
  • +
+
+
+
+ +
+
+
+

Download

+

Built by CI from the tag and checked against checksums.txt. + Every release is on the releases page + with its changelog.

+
+
+{{if .Release}} +
{{.Release}}{{with .Date}}Released {{.}}{{end}}
+
+ + + + + + + + + + + + +
ForFileNotes
Linux x86-64llmgw-{{$.Release}}-linux-amd64Static. Runs on any libc.
Linux ARM64llmgw-{{$.Release}}-linux-arm64Static.
Linux x86-64, NVLinkllmgw-{{$.Release}}-linux-amd64-nvmlSees NVLink topology through NVML. For PCIe boxes with NVLink bridges. Needs the driver.
macOS Apple siliconllmgw-{{$.Release}}-darwin-arm64For llmgw ctl and trying it on a laptop.
macOS Intelllmgw-{{$.Release}}-darwin-amd64
CaddyCaddyfileReverse proxy for port 8080.
nginxnginx.confReverse proxy for port 8080.
Checksumschecksums.txtSHA-256 of every file above.
+
+ {{else}} +

This is a development build ({{.Version}}). Take a release + from the releases page, where every + file is listed with its checksum.

+ {{end}} +
+
+
+ +
+
+
+

Where it stands

+

Pre-1.0: configuration formats may change between minor versions. + This is what has run on real hardware, and what has not yet.

+
+
+
+

Run on real clusters

+
    +
  • Single-node replicas on real GPUs and on CPU
  • +
  • On-demand loading and idle shutdown
  • +
  • Keys, budgets, rate limits and priority bands
  • +
  • Rolling upgrades with no dropped replicas
  • +
  • SQLite and PostgreSQL stores
  • +
  • Chat, editor setup and the Responses API against a six-node test cluster
  • +
+
+
+

Not yet proven

+
    +
  • InfiniBand and NVLink on a real site: written and tested against the real output of + sminfo, ibnetdiscover and nvidia-smi, but not yet run + on the hardware. Run llmgw doctor --json on a few nodes first.
  • +
  • Two control planes over long periods
  • +
  • vLLM and SGLang are not installed by the node yet; name their paths yourself
  • +
  • Nodes do not share downloaded weights; the mirror keeps each download local
  • +
+
+
+
+
+ + +
+ + +{{if not .Site}}{{end}}{{end}} diff --git a/internal/web/templates/landing.html b/internal/web/templates/landing.html index 1450d02..f26e95a 100644 --- a/internal/web/templates/landing.html +++ b/internal/web/templates/landing.html @@ -185,7 +185,7 @@ is listed here — there is nothing llmgw-specific to install.

  • GET {{.BaseURL}}/meits limits, and what it has spent
  • -
    llmgw {{.Version}}{{.Now}}
    +