2024-06-23 08:24:36 +00:00
|
|
|
module github.com/mudler/LocalAI
|
2023-03-18 22:59:06 +00:00
|
|
|
|
2026-03-06 23:03:08 +00:00
|
|
|
go 1.26.0
|
2023-03-18 22:59:06 +00:00
|
|
|
|
|
|
|
|
require (
|
2025-10-13 19:47:24 +00:00
|
|
|
dario.cat/mergo v1.0.2
|
2026-02-23 22:25:46 +00:00
|
|
|
fyne.io/fyne/v2 v2.7.3
|
2024-11-20 13:18:52 +00:00
|
|
|
github.com/Masterminds/sprig/v3 v3.3.0
|
2026-02-10 04:29:00 +00:00
|
|
|
github.com/alecthomas/kong v1.14.0
|
2026-05-12 07:20:24 +00:00
|
|
|
github.com/anthropics/anthropic-sdk-go v1.42.0
|
2026-04-21 09:42:27 +00:00
|
|
|
github.com/aws/aws-sdk-go-v2 v1.41.6
|
2026-04-21 13:30:22 +00:00
|
|
|
github.com/aws/aws-sdk-go-v2/config v1.32.16
|
|
|
|
|
github.com/aws/aws-sdk-go-v2/credentials v1.19.15
|
2026-04-21 09:42:27 +00:00
|
|
|
github.com/aws/aws-sdk-go-v2/service/s3 v1.99.1
|
2026-04-14 09:17:05 +00:00
|
|
|
github.com/charmbracelet/glamour v1.0.0
|
2026-04-21 09:42:43 +00:00
|
|
|
github.com/containerd/containerd v1.7.31
|
2026-04-21 13:31:02 +00:00
|
|
|
github.com/coreos/go-oidc/v3 v3.18.0
|
2026-02-09 23:34:36 +00:00
|
|
|
github.com/dhowden/tag v0.0.0-20240417053706-3d75831295e8
|
2026-03-17 10:42:06 +00:00
|
|
|
github.com/ebitengine/purego v0.10.0
|
2025-12-29 10:06:06 +00:00
|
|
|
github.com/emirpasic/gods/v2 v2.0.0-alpha
|
2026-05-12 07:21:18 +00:00
|
|
|
github.com/fsnotify/fsnotify v1.10.1
|
2023-05-09 09:43:50 +00:00
|
|
|
github.com/go-audio/wav v1.1.0
|
2024-07-12 19:54:08 +00:00
|
|
|
github.com/go-skynet/go-llama.cpp v0.0.0-20240314183750-6a8041ef6b46
|
2025-10-20 20:54:53 +00:00
|
|
|
github.com/gofrs/flock v0.13.0
|
2026-04-14 09:15:09 +00:00
|
|
|
github.com/google/go-containerregistry v0.21.5
|
2024-06-04 06:39:19 +00:00
|
|
|
github.com/google/uuid v1.6.0
|
2026-02-23 22:26:41 +00:00
|
|
|
github.com/gpustack/gguf-parser-go v0.24.0
|
2023-07-14 23:19:43 +00:00
|
|
|
github.com/hpcloud/tail v1.0.0
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/ipfs/go-log v1.0.5
|
2026-04-06 19:46:18 +00:00
|
|
|
github.com/jaypipes/ghw v0.24.0
|
2024-05-13 09:37:52 +00:00
|
|
|
github.com/joho/godotenv v1.5.1
|
2025-10-27 20:30:05 +00:00
|
|
|
github.com/klauspost/cpuid/v2 v2.3.0
|
2026-03-09 21:26:39 +00:00
|
|
|
github.com/labstack/echo/v4 v4.15.1
|
2026-05-04 20:07:42 +00:00
|
|
|
github.com/libp2p/go-libp2p v0.48.0
|
2025-10-20 19:39:11 +00:00
|
|
|
github.com/lithammer/fuzzysearch v1.1.8
|
2023-06-24 06:18:17 +00:00
|
|
|
github.com/mholt/archiver/v3 v3.5.1
|
2025-09-02 12:16:24 +00:00
|
|
|
github.com/microcosm-cc/bluemonday v1.0.27
|
2026-04-21 09:43:00 +00:00
|
|
|
github.com/modelcontextprotocol/go-sdk v1.5.0
|
2026-03-15 23:50:19 +00:00
|
|
|
github.com/mudler/cogito v0.9.5-0.20260315222927-63abdec7189b
|
2026-05-12 07:51:39 +00:00
|
|
|
github.com/mudler/edgevpn v0.32.2
|
2026-04-27 12:19:18 +00:00
|
|
|
github.com/mudler/go-processmanager v0.1.1
|
2026-04-06 22:39:07 +00:00
|
|
|
github.com/mudler/memory v0.0.0-20260406210934-424c1ecf2cf8
|
2026-03-26 21:16:13 +00:00
|
|
|
github.com/mudler/xlog v0.0.6
|
2026-03-30 21:15:39 +00:00
|
|
|
github.com/nats-io/nats.go v1.50.0
|
2026-04-09 12:15:14 +00:00
|
|
|
github.com/ollama/ollama v0.20.4
|
2026-04-28 06:44:41 +00:00
|
|
|
github.com/onsi/ginkgo/v2 v2.28.2
|
2026-05-12 07:20:36 +00:00
|
|
|
github.com/onsi/gomega v1.40.0
|
2026-03-09 21:23:29 +00:00
|
|
|
github.com/openai/openai-go/v3 v3.26.0
|
2025-08-03 12:24:50 +00:00
|
|
|
github.com/otiai10/copy v1.14.1
|
2024-07-12 19:54:08 +00:00
|
|
|
github.com/otiai10/openaigo v1.7.0
|
2023-07-14 23:19:43 +00:00
|
|
|
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5
|
2025-10-20 19:39:11 +00:00
|
|
|
github.com/prometheus/client_golang v1.23.2
|
2025-12-01 22:55:30 +00:00
|
|
|
github.com/robfig/cron/v3 v3.0.1
|
2024-04-11 07:19:24 +00:00
|
|
|
github.com/russross/blackfriday v1.6.0
|
2025-10-05 15:51:41 +00:00
|
|
|
github.com/sashabaranov/go-openai v1.41.2
|
2025-12-29 21:15:11 +00:00
|
|
|
github.com/schollz/progressbar/v3 v3.19.0
|
2024-07-12 19:54:08 +00:00
|
|
|
github.com/shirou/gopsutil/v3 v3.24.5
|
2024-11-20 17:13:42 +00:00
|
|
|
github.com/streamer45/silero-vad-go v0.2.1
|
2026-04-14 09:15:37 +00:00
|
|
|
github.com/swaggo/echo-swagger v1.5.2
|
2025-09-09 06:56:59 +00:00
|
|
|
github.com/swaggo/swag v1.16.6
|
2026-04-13 19:54:02 +00:00
|
|
|
github.com/testcontainers/testcontainers-go v0.42.0
|
2026-04-14 09:15:26 +00:00
|
|
|
github.com/testcontainers/testcontainers-go/modules/nats v0.42.0
|
2026-04-28 06:44:27 +00:00
|
|
|
github.com/testcontainers/testcontainers-go/modules/postgres v0.42.0
|
chore: Security hardening (#9719)
* fix(http): close 0.0.0.0/[::] SSRF bypass in /api/cors-proxy
The CORS proxy carried its own private-network blocklist (RFC 1918 + a
handful of IPv6 ranges) instead of using the same classification as
pkg/utils/urlfetch.go. The hand-rolled list missed 0.0.0.0/8 and ::/128,
both of which Linux routes to localhost — so any user with FeatureMCP
(default-on for new users) could reach LocalAI's own listener and any
other service bound to 0.0.0.0:port via:
GET /api/cors-proxy?url=http://0.0.0.0:8080/...
GET /api/cors-proxy?url=http://[::]:8080/...
Replace the custom check with utils.IsPublicIP (Go stdlib IsLoopback /
IsLinkLocalUnicast / IsPrivate / IsUnspecified, plus IPv4-mapped IPv6
unmasking) and add an upfront hostname rejection for localhost, *.local,
and the cloud metadata aliases so split-horizon DNS can't paper over the
IP check.
The IP-pinning DialContext is unchanged: the validated IP from the
single resolution is reused for the connection, so DNS rebinding still
cannot swap a public answer for a private one between validate and dial.
Regression tests cover 0.0.0.0, 0.0.0.0:PORT, [::], ::ffff:127.0.0.1,
::ffff:10.0.0.1, file://, gopher://, ftp://, localhost, 127.0.0.1,
10.0.0.1, 169.254.169.254, metadata.google.internal.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* fix(downloader): verify SHA before promoting temp file to final path
DownloadFileWithContext renamed the .partial file to its final name
*before* checking the streamed SHA, so a hash mismatch returned an
error but left the tampered file at filePath. Subsequent code that
operated on filePath (a backend launcher, a YAML loader, a re-download
that finds the file already present and skips) would consume the
attacker-supplied bytes.
Reorder: verify the streamed hash first, remove the .partial on
mismatch, then rename. The streamed hash is computed during io.Copy
so no second read is needed.
While here, raise the empty-SHA case from a Debug log to a Warn so
"this download had no integrity check" is visible at the default log
level. Backend installs currently pass through with no digest; the
warning makes that footprint observable without changing behaviour.
Regression test asserts os.IsNotExist on the destination after a
deliberate SHA mismatch.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* fix(auth): require email_verified for OIDC admin promotion
extractOIDCUserInfo read the ID token's "email" claim but never
inspected "email_verified". With LOCALAI_ADMIN_EMAIL set, an attacker
who could register on the configured OIDC IdP under that email (some
IdPs accept self-supplied unverified emails) inherited admin role:
- first login: AssignRole(tx, email, adminEmail) → RoleAdmin
- re-login: MaybePromote(db, user, adminEmail) → flip to RoleAdmin
Add EmailVerified to oauthUserInfo, parse email_verified from the OIDC
claims (default false on absence so an IdP that omits the claim cannot
short-circuit the gate), and substitute "" for the role-decision email
when verified=false via emailForRoleDecision. The user record still
stores the unverified email for display.
GitHub's path defaults EmailVerified=true: GitHub only returns a public
profile email after verification, and fetchGitHubPrimaryEmail explicitly
filters to Verified=true.
Regression tests cover both the helper contract and integration with
AssignRole, including the bootstrap "first user" branch that would
otherwise mask the gate.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* feat(cli): refuse public bind when no auth backend is configured
When neither an auth DB nor a static API key is set, the auth
middleware passes every request through. That is fine for a developer
laptop, a home LAN, or a Tailnet — the network itself is the trust
boundary. It is not fine on a public IP, where every model install,
settings change, and admin endpoint becomes reachable from the
internet.
Refuse to start in that exact configuration. Loopback, RFC 1918,
RFC 4193 ULA, link-local, and RFC 6598 CGNAT (Tailscale's default
range) all count as trusted; wildcard binds (`:port`, `0.0.0.0`,
`[::]`) are accepted only when every host interface is in one of those
ranges. Hostnames are resolved and treated as trusted only when every
answer is.
A new --allow-insecure-public-bind / LOCALAI_ALLOW_INSECURE_PUBLIC_BIND
flag opts out for deployments that gate access externally (a reverse
proxy enforcing auth, a mesh ACL, etc.). The error message lists this
plus the three constructive alternatives (bind a private interface,
enable --auth, set --api-keys).
The interface enumeration goes through a package-level interfaceAddrsFn
var so tests can simulate cloud-VM, home-LAN, Tailscale-only, and
enumeration-failure topologies without poking at the real network
stack.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* test(http): regression-test the localai_assistant admin gate
ChatEndpoint already rejects metadata.localai_assistant=true from a
non-admin caller, but the gate was open-coded inline with no direct
test coverage. The chat route is FeatureChat-gated (default-on), and
the assistant's in-process MCP server can install/delete models and
edit configs — the wrong handler change would silently turn the LLM
into a confused deputy.
Extract the gate into requireAssistantAccess(c, authEnabled) and pin
its behaviour: auth disabled is a no-op, unauthenticated is 403,
RoleUser is 403, RoleAdmin and the synthetic legacy-key admin are
admitted.
No behaviour change in the production path.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* test(http): assert every API route is auth-classified
The auth middleware classifies path prefixes (/api/, /v1/, /models/,
etc.) as protected and treats anything else as a static-asset
passthrough. A new endpoint shipped under a brand-new prefix — or a
new path that simply isn't on the prefix allowlist — would be
reachable anonymously.
Walk every route registered by API() with auth enabled and a fresh
in-memory database (no users, no keys), and assert each API-prefixed
route returns 401 / 404 / 405 to an anonymous request. Public surfaces
(/api/auth/*, /api/branding, /api/node/* token-authenticated routes,
/healthz, branding asset server, generated-content server, static
assets) are explicit allowlist entries with comments justifying them.
Build-tagged 'auth' so it runs against the SQLite-backed auth DB
(matches the existing auth suite).
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* test(http): pin agent endpoint per-user isolation contract
agents.go's getUserID / effectiveUserID / canImpersonateUser /
wantsAllUsers helpers are the single trust boundary for cross-user
access on agent, agent-jobs, collections, and skills routes. A
regression there is the difference between "regular user reads their
own data" and "regular user reads anyone's data via ?user_id=victim".
Lock in the contract:
- effectiveUserID ignores ?user_id= for unauthenticated and RoleUser
- effectiveUserID honours it for RoleAdmin and ProviderAgentWorker
- wantsAllUsers requires admin AND the literal "true" string
- canImpersonateUser is admin OR agent-worker, never plain RoleUser
No production change — this commit only adds tests.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* fix(downloader): drop redundant stat in removePartialFile
The stat-then-remove pattern is a TOCTOU window and a wasted syscall —
os.Remove already returns ErrNotExist for the missing-file case, so trust
that and treat it as a no-op.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* fix(http): redact secrets from trace buffer and distribution-token logs
The /api/traces buffer captured Authorization, Cookie, Set-Cookie, and
API-key headers verbatim from every request when tracing was enabled. The
endpoint is admin-only but the buffer is reachable via any heap-style
introspection and the captured tokens otherwise outlive the request.
Strip those header values at capture time. Body redaction is left to a
follow-up — the prompts are usually the operator's own and JSON-walking
is invasive.
Distribution tokens were also logged in plaintext from
core/explorer/discovery.go; logs forward to syslog/journald and outlive
the token. Redact those to a short prefix/suffix instead.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* feat(auth): rate-limit OAuth callbacks separately from password endpoints
The shared 5/min/IP limit on auth endpoints is right for password-style
flows but too tight for OAuth callbacks: corporate SSO funnels many real
users through one outbound IP and would trip the limit. Add a separate
60/min/IP limiter for /api/auth/{github,oidc}/callback so callbacks are
bounded against floods without breaking shared-IP deployments.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* feat(gallery): verify backend tarball sha256 when set in gallery entry
GalleryBackend gained an optional sha256 field; the install path now
threads it through to the existing downloader hash-verify (which already
streams, verifies, and rolls back on mismatch). Galleries without sha256
keep working; the empty-SHA path still emits the existing
"downloading without integrity check" warning.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* test(http): pin CSRF coverage on multipart endpoints
The CSRF middleware in app.go is global (e.Use) so it covers every
multipart upload route — branding assets, fine-tune datasets, audio
transforms, agent collections. Pin that contract: cross-site multipart
POSTs are rejected; same-origin / same-site / API-key clients are not.
Also pins the SameSite=Lax fallback path the skipper relies on when
Sec-Fetch-Site is absent.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* feat(http): XSS hardening — CSP headers, safe href, base-href escape, SVG sandbox
Several closely related XSS-prevention changes spanning the SPA shell, the
React UI, and the branding asset server:
- New SecurityHeaders middleware sets CSP, X-Content-Type-Options,
X-Frame-Options, and Referrer-Policy on every response. The CSP keeps
script-src permissive because the Vite bundle relies on inline + eval'd
scripts; tightening that requires moving to a nonce-based policy.
- The <base href> injection in the SPA shell escaped attacker-controllable
Host / X-Forwarded-Host headers — a single quote in the host header
broke out of the attribute. Pass through SecureBaseHref (html.EscapeString).
- Three React sinks rendering untrusted content via dangerouslySetInnerHTML
switch to text-node rendering with whiteSpace: pre-wrap: user message
bodies in Chat.jsx and AgentChat.jsx, and the agent activity log in
AgentChat.jsx. The hand-rolled escape on the agent user-message variant
is replaced by the same plain-text path.
- New safeHref util collapses non-allowlisted URI schemes (most
importantly javascript:) to '#'. Applied to gallery `<a href={url}>`
links in Models / Backends / Manage and to canvas artifact links —
these come from gallery JSON or assistant tool calls and must be treated
as untrusted.
- The branding asset server attaches a sandbox CSP plus same-origin CORP
to .svg responses. The React UI loads logos via <img>, but the same URL
is also reachable via direct navigation; this prevents script
execution if a hostile SVG slipped past upload validation.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* feat(http): bound HTTP server with read-header and idle timeouts
A net/http server with no timeouts is trivially Slowloris-able and leaks
idle keep-alive connections. Set ReadHeaderTimeout (30s) to plug the
slow-headers attack and IdleTimeout (120s) to cap keep-alive sockets.
ReadTimeout and WriteTimeout stay at 0 because request bodies can be
multi-GB model uploads and SSE / chat completions stream for many
minutes; operators who need tighter per-request bounds should terminate
slow clients at a reverse proxy.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* test(auth): pin PUT /api/auth/profile field-tampering contract
The handler uses an explicit local body struct (only name and avatar_url)
plus a gorm Updates(map) with a column allowlist, so an attacker posting
{"role":"admin","email":"...","password_hash":"..."} can't mass-assign
those fields. Lock that down with a regression test so a future
"let's just c.Bind(&user)" refactor breaks loudly.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* fix(services): strip directory components from multipart upload filenames
UploadDataset and UploadToCollectionForUser took the raw multipart
file.Filename and joined it into a destination path. The fine-tune
upload was incidentally safe because of a UUID prefix that fused any
leading '..' to a literal segment, but the protection is fragile.
UploadToCollectionForUser handed the filename to a vendored backend
without sanitising at all.
Strip to filepath.Base at both boundaries and reject the trivial
unsafe values ("", ".", "..", "/").
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* fix(react-ui): validate persisted MCP server entries on load
localStorage is shared across same-origin pages; an XSS that lands once
can poison persisted MCP server config to attempt header injection or
to feed a non-http URL into the fetch path on subsequent loads.
Validate every entry: types must match, URL must parse with http(s)
scheme, header keys/values must be control-char-free. Drop anything
that doesn't fit.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* fix(http): close X-Forwarded-Prefix open redirect
The reverse-proxy support concatenated X-Forwarded-Prefix into the
redirect target without validation, so a forged header value of
"//evil.com" turned the SPA-shell redirect helper at /, /browse, and
/browse/* into a 301 to //evil.com/app. The path-strip middleware had
the same shape on its prefix-trailing-slash redirect.
Add SafeForwardedPrefix at the middleware boundary: must start with
a single '/', no protocol-relative '//' opener, no scheme, no
backslash, no control characters. Apply at both consumers; misconfig
trips the validator and the header is dropped.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* fix(http): refuse wildcard CORS when LOCALAI_CORS=true with empty allowlist
When LOCALAI_CORS=true but LOCALAI_CORS_ALLOW_ORIGINS was empty, Echo's
CORSWithConfig saw an empty allow-list and fell back to its default
AllowOrigins=["*"]. An operator who flipped the strict-CORS feature
flag without populating the list got the opposite of what they asked
for. Echo never sets Allow-Credentials: true so this isn't directly
exploitable (cookies aren't sent under wildcard CORS), but the
misconfiguration trap is worth closing. Skip the registration and warn.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* feat(auth): zxcvbn password strength check with user-acknowledged override
The previous policy was len < 8, which let through "Password1" and the
rest of the credential-stuffing corpus. LocalAI has no second factor
yet, so the bar needs to sit higher.
Add ValidatePasswordStrength using github.com/timbutler/zxcvbn (an
actively-maintained fork of the trustelem port; v1.0.4, April 2024):
- min 12 chars, max 72 (bcrypt's truncation point)
- reject NUL bytes (some bcrypt callers truncate at the first NUL)
- require zxcvbn score >= 3 ("safely unguessable, ~10^8 guesses to
break"); the hint list ["localai", "local-ai", "admin"] penalises
passwords built from the app's own branding
zxcvbn produces false positives sometimes (a strong-looking password
that happens to match a dictionary word) and operators occasionally
need to set a known-weak password (kiosk demos, CI rigs). Add an
acknowledgement path: PasswordPolicy{AllowWeak: true} skips the
entropy check while still enforcing the hard rules. The structured
PasswordErrorResponse marks weak-password rejections as Overridable
so the UI can surface a "use this anyway" checkbox.
Wired through register, self-service password change, and admin
password reset on both the server and the React UI.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* fix(react-ui): drop HTML5 minLength on new-password inputs
minLength={12} on the new-password input let the browser block the
form submit silently before any JS or network call ran. The browser
focused the field, showed a brief native tooltip, and that was that —
no toast, no fetch, no clue. Reproducible by typing fewer than 12
chars on the second password change of a session.
The JS-level length check in handleSubmit already shows a toast and
the server rejects with a structured error, so the HTML5 attribute
was redundant defence anyway. Drop it.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* fix(react-ui): bundle Geist fonts locally instead of fetching from Google
The new CSP correctly refused to apply styles from
fonts.googleapis.com because style-src is locked to 'self' and
'unsafe-inline'. Loosening the CSP would defeat its purpose; the
right fix is to stop reaching out to a third-party CDN for fonts on
every page load.
Add @fontsource-variable/geist and @fontsource-variable/geist-mono as
npm deps and import them once at boot. Drop the <link rel="preconnect">
and external stylesheet from index.html.
Side benefit: no third-party tracking via Referer / IP on every UI
load, no failure mode when offline / behind a captive portal.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* fix(react-ui): refresh i18n strings to reflect 12-char password minimum
The translations still said "at least 8 characters" everywhere — the
client-side toast on a too-short password change told the user the
wrong floor. Update tooShort and newPasswordPlaceholder /
newPasswordDescription across all five locales (en, es, it, de,
zh-CN) to match the real ValidatePasswordStrength rule.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
* feat(auth): make password length-floor overridable like the entropy check
The 12-char minimum was a policy choice, not a technical invariant —
only "non-empty", "<= 72 bytes", and "no NUL bytes" are real bcrypt
constraints. Treating length-12 as a hard rule was inconsistent with
the entropy check (already overridable) and friction for use cases
where the account is just a name on a session, not a security
boundary (single-user kiosk, CI rig, lab demo).
Restructure ValidatePasswordStrength:
- Hard rules (always enforced): non-empty, <= MaxPasswordLength, no NUL byte
- Policy rules (skipped when AllowWeak=true): length >= 12, zxcvbn score >= 3
PasswordError now marks password_too_short as Overridable too. The
React forms generalised from `error_code === 'password_too_weak'` to
`overridable === true`, and the JS-side preflight length checks were
removed (server is source of truth, returns the same checkbox flow).
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Richard Palethorpe <io@richiejp.com>
---------
Signed-off-by: Richard Palethorpe <io@richiejp.com>
2026-05-08 14:25:45 +00:00
|
|
|
github.com/timbutler/zxcvbn v1.0.4
|
2026-04-06 22:39:52 +00:00
|
|
|
go.opentelemetry.io/otel v1.43.0
|
|
|
|
|
go.opentelemetry.io/otel/exporters/prometheus v0.65.0
|
|
|
|
|
go.opentelemetry.io/otel/metric v1.43.0
|
|
|
|
|
go.opentelemetry.io/otel/sdk/metric v1.43.0
|
2026-04-06 19:45:50 +00:00
|
|
|
google.golang.org/grpc v1.80.0
|
2026-03-26 21:16:13 +00:00
|
|
|
google.golang.org/protobuf v1.36.11
|
2023-04-28 17:24:49 +00:00
|
|
|
gopkg.in/yaml.v3 v3.0.1
|
2026-03-19 20:40:51 +00:00
|
|
|
gorm.io/driver/postgres v1.6.0
|
|
|
|
|
gorm.io/driver/sqlite v1.6.0
|
|
|
|
|
gorm.io/gorm v1.31.1
|
2025-09-08 23:43:28 +00:00
|
|
|
oras.land/oras-go/v2 v2.6.0
|
2023-03-18 22:59:06 +00:00
|
|
|
)
|
|
|
|
|
|
2026-03-14 10:06:05 +00:00
|
|
|
require (
|
2026-05-04 20:07:42 +00:00
|
|
|
filippo.io/bigmod v0.1.1-0.20260103110540-f8a47775ebe5 // indirect
|
|
|
|
|
filippo.io/keygen v0.0.0-20260114151900-8e2790ea4c5b // indirect
|
2026-04-21 09:42:27 +00:00
|
|
|
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9 // indirect
|
2026-04-21 13:30:22 +00:00
|
|
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.22 // indirect
|
2026-04-21 09:42:27 +00:00
|
|
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.22 // indirect
|
|
|
|
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.22 // indirect
|
|
|
|
|
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23 // indirect
|
|
|
|
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8 // indirect
|
|
|
|
|
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.14 // indirect
|
|
|
|
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22 // indirect
|
|
|
|
|
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.22 // indirect
|
2026-04-21 13:30:22 +00:00
|
|
|
github.com/aws/aws-sdk-go-v2/service/signin v1.0.10 // indirect
|
|
|
|
|
github.com/aws/aws-sdk-go-v2/service/sso v1.30.16 // indirect
|
|
|
|
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20 // indirect
|
|
|
|
|
github.com/aws/aws-sdk-go-v2/service/sts v1.42.0 // indirect
|
2026-04-21 09:42:27 +00:00
|
|
|
github.com/aws/smithy-go v1.25.0 // indirect
|
2026-04-09 12:15:14 +00:00
|
|
|
github.com/bahlo/generic-list-go v0.2.0 // indirect
|
2026-05-07 15:29:04 +00:00
|
|
|
github.com/buger/jsonparser v1.1.2 // indirect
|
2026-05-04 20:07:42 +00:00
|
|
|
github.com/dunglas/httpsfv v1.1.0 // indirect
|
2026-05-12 07:51:39 +00:00
|
|
|
github.com/filecoin-project/go-clock v0.1.0 // indirect
|
2026-04-21 13:31:02 +00:00
|
|
|
github.com/go-jose/go-jose/v4 v4.1.4 // indirect
|
2026-05-12 07:20:24 +00:00
|
|
|
github.com/invopop/jsonschema v0.13.0 // indirect
|
2026-03-19 20:40:51 +00:00
|
|
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
|
|
|
|
github.com/jinzhu/now v1.1.5 // indirect
|
2026-05-07 07:48:14 +00:00
|
|
|
github.com/jolestar/go-commons-pool/v2 v2.1.2 // indirect
|
|
|
|
|
github.com/klippa-app/go-pdfium v1.19.2 // indirect
|
2026-04-09 12:15:14 +00:00
|
|
|
github.com/mattn/go-sqlite3 v1.14.24 // indirect
|
2026-04-13 19:54:02 +00:00
|
|
|
github.com/moby/moby/api v1.54.1 // indirect
|
|
|
|
|
github.com/moby/moby/client v0.4.0 // indirect
|
2026-03-30 21:15:39 +00:00
|
|
|
github.com/nats-io/nkeys v0.4.15 // indirect
|
2026-03-29 22:47:27 +00:00
|
|
|
github.com/nats-io/nuid v1.0.1 // indirect
|
2026-05-12 07:20:24 +00:00
|
|
|
github.com/standard-webhooks/standard-webhooks/libraries v0.0.0-20260508151727-1282bb917829 // indirect
|
2026-03-14 10:06:05 +00:00
|
|
|
github.com/stretchr/testify v1.11.1 // indirect
|
2026-04-14 09:15:37 +00:00
|
|
|
github.com/sv-tools/openapi v0.2.1 // indirect
|
|
|
|
|
github.com/swaggo/swag/v2 v2.0.0-rc4 // indirect
|
2026-05-07 07:48:14 +00:00
|
|
|
github.com/tetratelabs/wazero v1.11.0 // indirect
|
2026-03-14 10:06:05 +00:00
|
|
|
github.com/tmc/langchaingo v0.1.14 // indirect
|
2026-04-09 12:15:14 +00:00
|
|
|
github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
|
2026-03-29 22:47:27 +00:00
|
|
|
sigs.k8s.io/yaml v1.6.0 // indirect
|
2026-03-14 10:06:05 +00:00
|
|
|
)
|
2026-03-09 21:23:15 +00:00
|
|
|
|
2025-11-14 21:57:53 +00:00
|
|
|
require (
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/JohannesKaufmann/dom v0.2.0 // indirect
|
|
|
|
|
github.com/JohannesKaufmann/html-to-markdown/v2 v2.4.0 // indirect
|
|
|
|
|
github.com/ProtonMail/go-crypto v1.1.6 // indirect
|
|
|
|
|
github.com/PuerkitoBio/goquery v1.10.3 // indirect
|
|
|
|
|
github.com/RoaringBitmap/roaring/v2 v2.4.5 // indirect
|
|
|
|
|
github.com/andybalholm/cascadia v1.3.3 // indirect
|
|
|
|
|
github.com/antchfx/htmlquery v1.3.4 // indirect
|
|
|
|
|
github.com/antchfx/xmlquery v1.4.4 // indirect
|
2026-05-07 15:29:04 +00:00
|
|
|
github.com/antchfx/xpath v1.3.6 // indirect
|
2026-04-14 09:17:05 +00:00
|
|
|
github.com/bits-and-blooms/bitset v1.24.0 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/blevesearch/bleve/v2 v2.5.7 // indirect
|
|
|
|
|
github.com/blevesearch/bleve_index_api v1.2.11 // indirect
|
|
|
|
|
github.com/blevesearch/geo v0.2.4 // indirect
|
|
|
|
|
github.com/blevesearch/go-faiss v1.0.26 // indirect
|
|
|
|
|
github.com/blevesearch/go-porterstemmer v1.0.3 // indirect
|
|
|
|
|
github.com/blevesearch/gtreap v0.1.1 // indirect
|
|
|
|
|
github.com/blevesearch/mmap-go v1.0.4 // indirect
|
|
|
|
|
github.com/blevesearch/scorch_segment_api/v2 v2.3.13 // indirect
|
|
|
|
|
github.com/blevesearch/segment v0.9.1 // indirect
|
|
|
|
|
github.com/blevesearch/snowballstem v0.9.0 // indirect
|
|
|
|
|
github.com/blevesearch/upsidedown_store_api v1.0.2 // indirect
|
|
|
|
|
github.com/blevesearch/vellum v1.1.0 // indirect
|
|
|
|
|
github.com/blevesearch/zapx/v11 v11.4.2 // indirect
|
|
|
|
|
github.com/blevesearch/zapx/v12 v12.4.2 // indirect
|
|
|
|
|
github.com/blevesearch/zapx/v13 v13.4.2 // indirect
|
|
|
|
|
github.com/blevesearch/zapx/v14 v14.4.2 // indirect
|
|
|
|
|
github.com/blevesearch/zapx/v15 v15.4.2 // indirect
|
|
|
|
|
github.com/blevesearch/zapx/v16 v16.2.8 // indirect
|
|
|
|
|
github.com/bwmarrin/discordgo v0.29.0 // indirect
|
2026-05-07 15:29:04 +00:00
|
|
|
github.com/cloudflare/circl v1.6.3 // indirect
|
2026-05-11 16:37:00 +00:00
|
|
|
github.com/cyphar/filepath-securejoin v0.6.1 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/emersion/go-imap/v2 v2.0.0-beta.5 // indirect
|
|
|
|
|
github.com/emersion/go-message v0.18.2 // indirect
|
|
|
|
|
github.com/emersion/go-sasl v0.0.0-20241020182733-b788ff22d5a6 // indirect
|
|
|
|
|
github.com/emersion/go-smtp v0.24.0 // indirect
|
|
|
|
|
github.com/emirpasic/gods v1.18.1 // indirect
|
|
|
|
|
github.com/eritikass/githubmarkdownconvertergo v0.1.10 // indirect
|
|
|
|
|
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
|
2026-05-11 16:37:00 +00:00
|
|
|
github.com/go-git/go-billy/v5 v5.9.0 // indirect
|
|
|
|
|
github.com/go-git/go-git/v5 v5.19.0 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/go-telegram/bot v1.17.0 // indirect
|
|
|
|
|
github.com/gobwas/glob v0.2.3 // indirect
|
|
|
|
|
github.com/gocolly/colly v1.2.0 // indirect
|
2026-05-07 15:29:04 +00:00
|
|
|
github.com/gofiber/fiber/v2 v2.52.13 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/golang/protobuf v1.5.4 // indirect
|
2026-05-15 19:48:59 +00:00
|
|
|
github.com/gomarkdown/markdown v0.0.0-20260411013819-759bbc3e3207 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/google/go-github/v69 v69.2.0 // indirect
|
|
|
|
|
github.com/google/go-querystring v1.1.0 // indirect
|
|
|
|
|
github.com/jackc/pgpassfile v1.0.0 // indirect
|
|
|
|
|
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
|
2026-05-07 15:29:04 +00:00
|
|
|
github.com/jackc/pgx/v5 v5.9.2 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/jackc/puddle/v2 v2.2.2 // indirect
|
|
|
|
|
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
|
|
|
|
|
github.com/jung-kurt/gofpdf v1.16.2 // indirect
|
|
|
|
|
github.com/kennygrant/sanitize v1.2.4 // indirect
|
|
|
|
|
github.com/kevinburke/ssh_config v1.2.0 // indirect
|
2025-11-14 21:57:53 +00:00
|
|
|
github.com/labstack/gommon v0.4.2 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/mschoch/smat v0.2.0 // indirect
|
2026-05-08 14:24:42 +00:00
|
|
|
github.com/mudler/LocalAGI v0.0.0-20260508125235-37810d918a87
|
2026-05-07 07:48:14 +00:00
|
|
|
github.com/mudler/localrecall v0.6.1-0.20260507074622-a7724fef6f81 // indirect
|
2026-03-24 07:51:02 +00:00
|
|
|
github.com/mudler/skillserver v0.0.6
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
|
|
|
|
github.com/oxffaa/gopher-parse-sitemap v0.0.0-20191021113419-005d2eb1def4 // indirect
|
|
|
|
|
github.com/philippgille/chromem-go v0.7.0 // indirect
|
2026-03-13 20:37:15 +00:00
|
|
|
github.com/pion/transport/v4 v4.0.1 // indirect
|
2026-05-11 16:37:00 +00:00
|
|
|
github.com/pjbgf/sha1cd v0.6.0 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/rs/zerolog v1.31.0 // indirect
|
|
|
|
|
github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d // indirect
|
2026-03-02 20:44:03 +00:00
|
|
|
github.com/segmentio/asm v1.1.3 // indirect
|
2026-03-23 23:36:23 +00:00
|
|
|
github.com/segmentio/encoding v0.5.4 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/sergi/go-diff v1.4.0 // indirect
|
|
|
|
|
github.com/skeema/knownhosts v1.3.1 // indirect
|
|
|
|
|
github.com/slack-go/slack v0.17.3 // indirect
|
|
|
|
|
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect
|
2025-11-14 21:57:53 +00:00
|
|
|
github.com/swaggo/files/v2 v2.0.2 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/temoto/robotstxt v1.1.2 // indirect
|
|
|
|
|
github.com/thoj/go-ircevent v0.0.0-20210723090443-73e444401d64 // indirect
|
2026-01-10 11:33:05 +00:00
|
|
|
github.com/tidwall/gjson v1.18.0 // indirect
|
2026-02-01 16:33:17 +00:00
|
|
|
github.com/tidwall/match v1.2.0 // indirect
|
2026-01-10 11:33:05 +00:00
|
|
|
github.com/tidwall/pretty v1.2.1 // indirect
|
|
|
|
|
github.com/tidwall/sjson v1.2.5 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/traefik/yaegi v0.16.1 // indirect
|
|
|
|
|
github.com/valyala/fasthttp v1.68.0 // indirect
|
2025-11-14 21:57:53 +00:00
|
|
|
github.com/valyala/fasttemplate v1.2.2 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/xanzy/ssh-agent v0.3.3 // indirect
|
2026-03-29 22:47:27 +00:00
|
|
|
go.etcd.io/bbolt v1.4.3 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
go.mau.fi/util v0.3.0 // indirect
|
|
|
|
|
go.starlark.net v0.0.0-20250417143717-f57e51f710eb // indirect
|
|
|
|
|
google.golang.org/appengine v1.6.8 // indirect
|
|
|
|
|
gopkg.in/warnings.v0 v0.1.2 // indirect
|
2026-02-16 13:10:19 +00:00
|
|
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
jaytaylor.com/html2text v0.0.0-20230321000545-74c2419ad056 // indirect
|
|
|
|
|
maunium.net/go/maulogger/v2 v2.4.1 // indirect
|
|
|
|
|
maunium.net/go/mautrix v0.17.0 // indirect
|
|
|
|
|
mvdan.cc/xurls/v2 v2.6.0 // indirect
|
2025-11-14 21:57:53 +00:00
|
|
|
)
|
|
|
|
|
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
require (
|
2026-01-13 07:45:58 +00:00
|
|
|
fyne.io/systray v1.12.0 // indirect
|
2025-10-28 04:57:03 +00:00
|
|
|
github.com/BurntSushi/toml v1.5.0 // indirect
|
2025-09-02 18:32:41 +00:00
|
|
|
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
|
|
|
|
|
github.com/charmbracelet/lipgloss v1.1.1-0.20250404203927-76690c660834 // indirect
|
2026-04-14 09:17:05 +00:00
|
|
|
github.com/charmbracelet/x/ansi v0.10.2 // indirect
|
2025-09-02 18:32:41 +00:00
|
|
|
github.com/charmbracelet/x/cellbuf v0.0.13 // indirect
|
|
|
|
|
github.com/charmbracelet/x/exp/slice v0.0.0-20250327172914-2fdc97757edf // indirect
|
|
|
|
|
github.com/charmbracelet/x/term v0.2.1 // indirect
|
2025-09-03 13:42:54 +00:00
|
|
|
github.com/containerd/errdefs/pkg v0.3.0 // indirect
|
2025-05-04 14:42:42 +00:00
|
|
|
github.com/containerd/platforms v0.2.1 // indirect
|
|
|
|
|
github.com/cpuguy83/dockercfg v0.3.2 // indirect
|
|
|
|
|
github.com/distribution/reference v0.6.0 // indirect
|
2024-11-20 17:13:42 +00:00
|
|
|
github.com/felixge/httpsnoop v1.0.4 // indirect
|
2025-10-28 04:57:03 +00:00
|
|
|
github.com/fredbi/uri v1.1.1 // indirect
|
2025-08-26 12:22:04 +00:00
|
|
|
github.com/fyne-io/gl-js v0.2.0 // indirect
|
|
|
|
|
github.com/fyne-io/glfw-js v0.3.0 // indirect
|
|
|
|
|
github.com/fyne-io/image v0.1.1 // indirect
|
2025-10-28 04:57:03 +00:00
|
|
|
github.com/fyne-io/oksvg v0.2.0 // indirect
|
2025-08-26 12:22:04 +00:00
|
|
|
github.com/go-gl/gl v0.0.0-20231021071112-07e5d0ea2e71 // indirect
|
|
|
|
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a // indirect
|
2024-07-12 19:54:08 +00:00
|
|
|
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
|
2025-08-26 12:22:04 +00:00
|
|
|
github.com/go-text/render v0.2.0 // indirect
|
2026-02-23 22:25:46 +00:00
|
|
|
github.com/go-text/typesetting v0.3.3 // indirect
|
2025-08-26 12:22:04 +00:00
|
|
|
github.com/godbus/dbus/v5 v5.1.0 // indirect
|
2026-02-16 23:04:19 +00:00
|
|
|
github.com/google/jsonschema-go v0.4.2 // indirect
|
2025-08-26 12:22:04 +00:00
|
|
|
github.com/hack-pad/go-indexeddb v0.3.2 // indirect
|
|
|
|
|
github.com/hack-pad/safejs v0.1.0 // indirect
|
|
|
|
|
github.com/jeandeaual/go-locale v0.0.0-20250612000132-0ef82f21eade // indirect
|
2024-12-08 12:50:33 +00:00
|
|
|
github.com/json-iterator/go v1.1.12 // indirect
|
2025-08-26 12:22:04 +00:00
|
|
|
github.com/jsummers/gobmp v0.0.0-20230614200233-a9de23ed2e25 // indirect
|
2026-05-12 07:51:39 +00:00
|
|
|
github.com/libp2p/go-yamux/v5 v5.1.0 // indirect
|
2025-10-05 15:51:41 +00:00
|
|
|
github.com/magiconair/properties v1.8.10 // indirect
|
2024-07-12 19:54:08 +00:00
|
|
|
github.com/moby/docker-image-spec v1.3.1 // indirect
|
2026-03-29 22:47:27 +00:00
|
|
|
github.com/moby/go-archive v0.2.0 // indirect
|
2026-04-13 19:54:02 +00:00
|
|
|
github.com/moby/patternmatcher v0.6.1 // indirect
|
2025-09-03 13:42:54 +00:00
|
|
|
github.com/moby/sys/user v0.4.0 // indirect
|
2025-08-29 06:12:12 +00:00
|
|
|
github.com/moby/sys/userns v0.1.0 // indirect
|
2024-12-08 12:50:33 +00:00
|
|
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
2026-03-29 22:47:27 +00:00
|
|
|
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
|
2024-07-12 19:54:08 +00:00
|
|
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
2025-08-26 12:22:04 +00:00
|
|
|
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
|
|
|
|
|
github.com/nicksnyder/go-i18n/v2 v2.5.1 // indirect
|
2025-08-03 12:24:50 +00:00
|
|
|
github.com/otiai10/mint v1.6.3 // indirect
|
2026-03-13 20:37:15 +00:00
|
|
|
github.com/pion/datachannel v1.6.0 // indirect
|
|
|
|
|
github.com/pion/dtls/v3 v3.1.2 // indirect
|
2026-03-30 21:15:54 +00:00
|
|
|
github.com/pion/ice/v4 v4.2.2 // indirect
|
2026-03-13 20:37:15 +00:00
|
|
|
github.com/pion/interceptor v0.1.44 // indirect
|
|
|
|
|
github.com/pion/logging v0.2.4 // indirect
|
|
|
|
|
github.com/pion/mdns/v2 v2.1.0 // indirect
|
2024-07-12 19:54:08 +00:00
|
|
|
github.com/pion/randutil v0.1.0 // indirect
|
2026-03-13 20:37:15 +00:00
|
|
|
github.com/pion/rtcp v1.2.16 // indirect
|
|
|
|
|
github.com/pion/rtp v1.10.1
|
2026-03-30 21:15:54 +00:00
|
|
|
github.com/pion/sctp v1.9.4 // indirect
|
2026-03-13 20:37:15 +00:00
|
|
|
github.com/pion/sdp/v3 v3.0.18 // indirect
|
|
|
|
|
github.com/pion/srtp/v3 v3.0.10 // indirect
|
|
|
|
|
github.com/pion/stun/v3 v3.1.1 // indirect
|
|
|
|
|
github.com/pion/turn/v4 v4.1.4 // indirect
|
2026-03-30 21:15:54 +00:00
|
|
|
github.com/pion/webrtc/v4 v4.2.11
|
2025-12-08 23:43:13 +00:00
|
|
|
github.com/prometheus/otlptranslator v1.0.0 // indirect
|
2025-10-28 04:57:03 +00:00
|
|
|
github.com/rymdport/portal v0.4.2 // indirect
|
2026-04-13 19:54:02 +00:00
|
|
|
github.com/shirou/gopsutil/v4 v4.26.3 // indirect
|
2025-08-26 12:22:04 +00:00
|
|
|
github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c // indirect
|
|
|
|
|
github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef // indirect
|
2025-01-09 08:33:22 +00:00
|
|
|
github.com/wlynxg/anet v0.0.5 // indirect
|
2025-09-02 18:32:41 +00:00
|
|
|
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
|
2025-10-05 15:51:41 +00:00
|
|
|
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
|
2025-11-24 20:18:41 +00:00
|
|
|
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
|
2026-05-12 07:51:39 +00:00
|
|
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 // indirect
|
2025-08-08 14:23:18 +00:00
|
|
|
go.uber.org/mock v0.5.2 // indirect
|
2026-03-09 21:25:49 +00:00
|
|
|
go.yaml.in/yaml/v2 v2.4.4
|
2025-09-02 16:03:35 +00:00
|
|
|
go.yaml.in/yaml/v3 v3.0.4 // indirect
|
2026-05-07 15:29:04 +00:00
|
|
|
golang.org/x/image v0.38.0 // indirect
|
2026-04-14 09:15:09 +00:00
|
|
|
golang.org/x/net v0.53.0 // indirect; indirect (for websocket)
|
2026-03-19 20:40:51 +00:00
|
|
|
golang.org/x/oauth2 v0.36.0
|
2026-04-14 09:15:09 +00:00
|
|
|
golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect
|
2025-12-16 07:15:41 +00:00
|
|
|
golang.org/x/time v0.14.0 // indirect
|
2024-07-12 19:54:08 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
require (
|
2025-10-20 20:52:50 +00:00
|
|
|
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/KyleBanks/depth v1.2.1 // indirect
|
|
|
|
|
github.com/Masterminds/goutils v1.1.1 // indirect
|
2025-09-02 16:03:35 +00:00
|
|
|
github.com/Masterminds/semver/v3 v3.4.0 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/Microsoft/go-winio v0.6.2 // indirect
|
2024-07-12 19:54:08 +00:00
|
|
|
github.com/Microsoft/hcsshim v0.11.7 // indirect
|
2026-04-14 09:17:05 +00:00
|
|
|
github.com/alecthomas/chroma/v2 v2.20.0 // indirect
|
2025-11-04 01:16:28 +00:00
|
|
|
github.com/andybalholm/brotli v1.2.0 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
|
|
|
|
|
github.com/aymerick/douceur v0.2.0 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/benbjohnson/clock v1.3.5 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/beorn7/perks v1.0.1 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/c-robinson/iplib v1.0.8 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
|
2024-07-12 19:54:08 +00:00
|
|
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/containerd/cgroups v1.1.0 // indirect
|
2025-08-29 06:12:12 +00:00
|
|
|
github.com/containerd/continuity v0.4.4 // indirect
|
2025-10-05 15:51:41 +00:00
|
|
|
github.com/containerd/errdefs v1.0.0 // indirect
|
2024-06-22 06:17:41 +00:00
|
|
|
github.com/containerd/log v0.1.0 // indirect
|
2026-03-02 20:44:40 +00:00
|
|
|
github.com/containerd/stargz-snapshotter/estargz v0.18.2 // indirect
|
2024-11-20 13:18:52 +00:00
|
|
|
github.com/creachadair/otp v0.5.0 // indirect
|
2025-10-20 20:52:50 +00:00
|
|
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect
|
2026-05-12 07:51:39 +00:00
|
|
|
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/dlclark/regexp2 v1.11.5 // indirect
|
2026-04-14 09:15:09 +00:00
|
|
|
github.com/docker/cli v29.4.0+incompatible // indirect
|
2025-11-10 18:40:26 +00:00
|
|
|
github.com/docker/docker v28.5.2+incompatible
|
2025-12-01 22:55:30 +00:00
|
|
|
github.com/docker/docker-credential-helpers v0.9.3 // indirect
|
2026-04-15 18:05:28 +00:00
|
|
|
github.com/docker/go-connections v0.6.0 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/docker/go-units v0.5.0 // indirect
|
|
|
|
|
github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect
|
2024-07-12 19:54:08 +00:00
|
|
|
github.com/flynn/noise v1.1.0 // indirect
|
2024-11-20 17:13:42 +00:00
|
|
|
github.com/go-audio/audio v1.0.0
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/go-audio/riff v1.0.0 // indirect
|
2025-09-02 16:03:35 +00:00
|
|
|
github.com/go-logr/logr v1.4.3 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/go-logr/stdr v1.2.2 // indirect
|
2024-08-23 22:27:14 +00:00
|
|
|
github.com/go-ole/go-ole v1.3.0 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/go-openapi/jsonpointer v0.21.0 // indirect
|
|
|
|
|
github.com/go-openapi/jsonreference v0.21.0 // indirect
|
|
|
|
|
github.com/go-openapi/spec v0.21.0 // indirect
|
|
|
|
|
github.com/go-openapi/swag v0.23.0 // indirect
|
|
|
|
|
github.com/gogo/protobuf v1.3.2 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
|
2026-05-12 07:51:39 +00:00
|
|
|
github.com/golang/snappy v0.0.5-0.20231225225746-43d5d4cd4e0e // indirect
|
2025-02-17 15:51:22 +00:00
|
|
|
github.com/google/btree v1.1.3 // indirect
|
2025-08-08 14:23:18 +00:00
|
|
|
github.com/google/go-cmp v0.7.0 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/google/gopacket v1.1.19 // indirect
|
2026-02-03 08:00:59 +00:00
|
|
|
github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/gorilla/css v1.0.1 // indirect
|
2026-03-29 22:47:27 +00:00
|
|
|
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674
|
2024-07-12 19:54:08 +00:00
|
|
|
github.com/hashicorp/golang-lru v1.0.2 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
|
2025-05-02 15:40:26 +00:00
|
|
|
github.com/henvic/httpretty v0.1.4 // indirect
|
2024-11-20 13:18:52 +00:00
|
|
|
github.com/huandu/xstrings v1.5.0 // indirect
|
2024-07-12 19:54:08 +00:00
|
|
|
github.com/huin/goupnp v1.3.0 // indirect
|
2026-05-12 07:51:39 +00:00
|
|
|
github.com/ipfs/boxo v0.37.0 // indirect
|
2026-05-07 15:29:04 +00:00
|
|
|
github.com/ipfs/go-cid v0.6.1 // indirect
|
2026-05-12 07:51:39 +00:00
|
|
|
github.com/ipfs/go-datastore v0.9.1 // indirect
|
|
|
|
|
github.com/ipfs/go-log/v2 v2.9.1 // indirect
|
2026-05-07 15:29:04 +00:00
|
|
|
github.com/ipld/go-ipld-prime v0.23.0 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
|
2025-09-02 11:04:35 +00:00
|
|
|
github.com/jaypipes/pcidb v1.1.1 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/josharian/intern v1.0.0 // indirect
|
2026-05-15 19:48:59 +00:00
|
|
|
github.com/klauspost/compress v1.18.5
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/klauspost/pgzip v1.2.5 // indirect
|
2025-08-08 14:23:18 +00:00
|
|
|
github.com/koron/go-ssdp v0.0.6 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
|
|
|
|
|
github.com/libp2p/go-cidranger v1.1.0 // indirect
|
2026-05-12 07:51:39 +00:00
|
|
|
github.com/libp2p/go-flow-metrics v0.3.0 // indirect
|
2024-07-12 19:54:08 +00:00
|
|
|
github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect
|
2026-05-12 07:51:39 +00:00
|
|
|
github.com/libp2p/go-libp2p-kad-dht v0.39.0 // indirect
|
|
|
|
|
github.com/libp2p/go-libp2p-kbucket v0.8.0 // indirect
|
|
|
|
|
github.com/libp2p/go-libp2p-pubsub v0.15.0 // indirect
|
2025-02-17 15:51:22 +00:00
|
|
|
github.com/libp2p/go-libp2p-record v0.3.1 // indirect
|
2025-08-08 14:23:18 +00:00
|
|
|
github.com/libp2p/go-libp2p-routing-helpers v0.7.5 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/libp2p/go-msgio v0.3.0 // indirect
|
2026-05-04 20:07:42 +00:00
|
|
|
github.com/libp2p/go-netroute v0.4.0 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/libp2p/go-reuseport v0.4.0 // indirect
|
|
|
|
|
github.com/libp2p/zeroconf/v2 v2.2.0 // indirect
|
2026-04-14 09:17:05 +00:00
|
|
|
github.com/lucasb-eyer/go-colorful v1.3.0 // indirect
|
2025-10-20 20:52:50 +00:00
|
|
|
github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/mailru/easyjson v0.7.7 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect
|
2025-02-17 15:51:22 +00:00
|
|
|
github.com/mattn/go-colorable v0.1.14 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
2026-04-14 09:17:05 +00:00
|
|
|
github.com/mattn/go-runewidth v0.0.17 // indirect
|
2026-05-12 07:51:39 +00:00
|
|
|
github.com/miekg/dns v1.1.72 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect
|
|
|
|
|
github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect
|
|
|
|
|
github.com/minio/sha256-simd v1.0.1 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect
|
|
|
|
|
github.com/mitchellh/copystructure v1.2.0 // indirect
|
|
|
|
|
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
|
|
|
|
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
2025-09-03 13:42:54 +00:00
|
|
|
github.com/moby/sys/sequential v0.6.0 // indirect
|
2025-10-20 20:52:50 +00:00
|
|
|
github.com/moby/term v0.5.2 // indirect
|
2026-05-07 15:29:04 +00:00
|
|
|
github.com/mr-tron/base58 v1.3.0 // indirect
|
2025-02-10 11:06:16 +00:00
|
|
|
github.com/mudler/go-piper v0.0.0-20241023091659-2494246fd9fc
|
2025-08-08 14:23:18 +00:00
|
|
|
github.com/mudler/water v0.0.0-20250808092830-dd90dcf09025 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/muesli/reflow v0.3.0 // indirect
|
2025-09-02 18:32:41 +00:00
|
|
|
github.com/muesli/termenv v0.16.0 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/multiformats/go-base32 v0.1.0 // indirect
|
|
|
|
|
github.com/multiformats/go-base36 v0.2.0 // indirect
|
2025-10-09 12:26:24 +00:00
|
|
|
github.com/multiformats/go-multiaddr v0.16.1
|
2026-05-12 07:51:39 +00:00
|
|
|
github.com/multiformats/go-multiaddr-dns v0.5.0 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect
|
2026-05-07 15:29:04 +00:00
|
|
|
github.com/multiformats/go-multibase v0.3.0 // indirect
|
|
|
|
|
github.com/multiformats/go-multicodec v0.10.0 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/multiformats/go-multihash v0.2.3 // indirect
|
2025-08-08 14:23:18 +00:00
|
|
|
github.com/multiformats/go-multistream v0.6.1 // indirect
|
2026-05-07 15:29:04 +00:00
|
|
|
github.com/multiformats/go-varint v0.1.0 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/nwaples/rardecode v1.1.0 // indirect
|
|
|
|
|
github.com/opencontainers/go-digest v1.0.0 // indirect
|
2025-09-08 20:06:46 +00:00
|
|
|
github.com/opencontainers/image-spec v1.1.1
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/opentracing/opentracing-go v1.2.0 // indirect
|
2025-12-19 21:50:18 +00:00
|
|
|
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect
|
feat(llama.cpp): Totally decentralized, private, distributed, p2p inference (#2343)
* feat(llama.cpp): Enable decentralized, distributed inference
As https://github.com/mudler/LocalAI/pull/2324 introduced distributed inferencing thanks to
@rgerganov implementation in https://github.com/ggerganov/llama.cpp/pull/6829 in upstream llama.cpp, now
it is possible to distribute the workload to remote llama.cpp gRPC server.
This changeset now uses mudler/edgevpn to establish a secure, distributed network between the nodes using a shared token.
The token is generated automatically when starting the server with the `--p2p` flag, and can be used by starting the workers
with `local-ai worker p2p-llama-cpp-rpc` by passing the token via environment variable (TOKEN) or with args (--token).
As per how mudler/edgevpn works, a network is established between the server and the workers with dht and mdns discovery protocols,
the llama.cpp rpc server is automatically started and exposed to the underlying p2p network so the API server can connect on.
When the HTTP server is started, it will discover the workers in the network and automatically create the port-forwards to the service locally.
Then llama.cpp is configured to use the services.
This feature is behind the "p2p" GO_FLAGS
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* go mod tidy
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* ci: add p2p tag
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* better message
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2024-05-20 17:17:59 +00:00
|
|
|
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
|
2026-04-09 12:15:14 +00:00
|
|
|
github.com/pierrec/lz4/v4 v4.1.8 // indirect
|
2025-07-22 14:31:04 +00:00
|
|
|
github.com/pkg/errors v0.9.1
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/pkoukk/tiktoken-go v0.1.7 // indirect
|
2025-10-20 20:52:50 +00:00
|
|
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
2026-05-07 15:29:04 +00:00
|
|
|
github.com/polydawn/refmt v0.89.1-0.20231129105047-37766d95467a // indirect
|
2024-08-23 22:27:14 +00:00
|
|
|
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
|
2025-08-08 14:23:18 +00:00
|
|
|
github.com/prometheus/client_model v0.6.2 // indirect
|
2026-02-03 07:36:34 +00:00
|
|
|
github.com/prometheus/common v0.67.5 // indirect
|
2026-04-06 22:39:52 +00:00
|
|
|
github.com/prometheus/procfs v0.20.1 // indirect
|
2026-05-04 20:07:42 +00:00
|
|
|
github.com/quic-go/qpack v0.6.0 // indirect
|
|
|
|
|
github.com/quic-go/quic-go v0.59.0 // indirect
|
|
|
|
|
github.com/quic-go/webtransport-go v0.10.0 // indirect
|
2024-07-12 19:54:08 +00:00
|
|
|
github.com/rivo/uniseg v0.4.7 // indirect
|
2024-05-13 09:37:52 +00:00
|
|
|
github.com/shoenig/go-m1cpu v0.1.6 // indirect
|
2024-11-20 13:18:52 +00:00
|
|
|
github.com/shopspring/decimal v1.4.0 // indirect
|
2026-03-23 23:35:55 +00:00
|
|
|
github.com/sirupsen/logrus v1.9.4 // indirect
|
2025-05-02 15:40:26 +00:00
|
|
|
github.com/smallnest/ringbuffer v0.0.0-20241116012123-461381446e3d // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/songgao/packets v0.0.0-20160404182456-549a10cd4091 // indirect
|
|
|
|
|
github.com/spaolacci/murmur3 v1.1.0 // indirect
|
2024-11-20 13:18:52 +00:00
|
|
|
github.com/spf13/cast v1.7.0 // indirect
|
2026-03-29 22:47:27 +00:00
|
|
|
github.com/tklauser/go-sysconf v0.3.16 // indirect
|
|
|
|
|
github.com/tklauser/numcpus v0.11.0 // indirect
|
2025-08-29 06:12:12 +00:00
|
|
|
github.com/ulikunitz/xz v0.5.14 // indirect
|
2024-05-13 09:37:52 +00:00
|
|
|
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
2025-12-01 22:55:30 +00:00
|
|
|
github.com/vbatts/tar-split v0.12.2 // indirect
|
2026-05-12 07:51:39 +00:00
|
|
|
github.com/vishvananda/netlink v1.3.1 // indirect
|
2025-02-17 15:51:22 +00:00
|
|
|
github.com/vishvananda/netns v0.0.5 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect
|
2023-06-24 06:18:17 +00:00
|
|
|
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
|
2026-03-06 23:03:08 +00:00
|
|
|
github.com/yuin/goldmark v1.7.13 // indirect
|
2026-04-14 09:17:05 +00:00
|
|
|
github.com/yuin/goldmark-emoji v1.0.6 // indirect
|
2024-07-12 19:54:08 +00:00
|
|
|
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
go.opencensus.io v0.24.0 // indirect
|
2026-04-06 22:39:52 +00:00
|
|
|
go.opentelemetry.io/otel/sdk v1.43.0 // indirect
|
|
|
|
|
go.opentelemetry.io/otel/trace v1.43.0 // indirect
|
2025-08-08 14:23:18 +00:00
|
|
|
go.uber.org/dig v1.19.0 // indirect
|
|
|
|
|
go.uber.org/fx v1.24.0 // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
go.uber.org/multierr v1.11.0 // indirect
|
2026-05-12 07:51:39 +00:00
|
|
|
go.uber.org/zap v1.27.1 // indirect
|
2026-04-14 09:15:09 +00:00
|
|
|
golang.org/x/crypto v0.50.0
|
2026-05-11 16:37:00 +00:00
|
|
|
golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect
|
2026-04-14 09:15:09 +00:00
|
|
|
golang.org/x/mod v0.35.0 // indirect
|
2026-03-29 22:47:27 +00:00
|
|
|
golang.org/x/sync v0.20.0
|
2026-04-14 09:15:09 +00:00
|
|
|
golang.org/x/sys v0.43.0 // indirect
|
|
|
|
|
golang.org/x/term v0.42.0 // indirect
|
|
|
|
|
golang.org/x/text v0.36.0 // indirect
|
|
|
|
|
golang.org/x/tools v0.44.0 // indirect
|
2025-02-17 15:51:22 +00:00
|
|
|
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect
|
2025-08-08 14:23:18 +00:00
|
|
|
golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb // indirect
|
2024-06-23 08:24:36 +00:00
|
|
|
golang.zx2c4.com/wireguard/windows v0.5.3 // indirect
|
2026-04-06 19:45:50 +00:00
|
|
|
gonum.org/v1/gonum v0.17.0 // indirect
|
2026-05-12 07:51:39 +00:00
|
|
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409 // indirect
|
2023-07-14 23:19:43 +00:00
|
|
|
gopkg.in/fsnotify.v1 v1.4.7 // indirect
|
|
|
|
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
|
2025-09-02 11:04:35 +00:00
|
|
|
howett.net/plist v1.0.2-0.20250314012144-ee69052608d9 // indirect
|
2025-08-08 14:23:18 +00:00
|
|
|
lukechampine.com/blake3 v1.4.1 // indirect
|
2023-06-24 06:18:17 +00:00
|
|
|
)
|