diff --git a/.github/ci/test-website-review-143.sh b/.github/ci/test-website-review-143.sh new file mode 100755 index 000000000..2a1961b76 --- /dev/null +++ b/.github/ci/test-website-review-143.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +set -euo pipefail + +python3 - <<'PY' +from pathlib import Path + +home = Path("website/layouts/index.html").read_text() +css = Path("website/static/css/site.css").read_text() +install = Path("docs/content/getting-started/install.md").read_text() +containers = Path("docs/content/getting-started/containers.md").read_text() + +def require(condition, message): + if not condition: + raise SystemExit(f"FAIL: {message}") + +require("Drop-in replacement for most upstream APIs." in home, + "homepage must use the requested drop-in API heading") +require("Everything else plugs into LocalAI." not in home, + "old runtime heading must be removed") +require("When the engine we need" not in home, + "hero must describe user outcomes instead of team implementation") +require('href="mailto:contact@localai.io"' in home and "business" in home.lower(), + "homepage must provide a direct business contact action") +require(home.index('id="localai"') < home.index('id="proof-quotes"') < home.index('id="mission"'), + "headline testimonials must directly follow the runtime section") +require(home.count('id="proof-quotes"') == 1, + "headline testimonials must appear exactly once") +require('id="engines"' not in home and "Engines we build" not in home, + "homepage engine showcase must be removed") +require('href="/docs/installation/index.html"' in home, + "installation guide action must use the direct installation URL") +require('parakeet.cpp' in home, + "capability engine names must link to their repositories") +require(".pane{min-height:" in css.replace(" ", ""), + "all installation panes must have a fixed minimum height") + +print("website review 143 source checks passed") +PY diff --git a/docs/content/getting-started/containers.md b/docs/content/getting-started/containers.md index a61148ded..aa0dfdb50 100644 --- a/docs/content/getting-started/containers.md +++ b/docs/content/getting-started/containers.md @@ -48,6 +48,13 @@ podman run -ti --name local-ai -p 8080:8080 localai/localai:latest #### GPU Images +Choose the image that matches your hardware and installed drivers: + +- **NVIDIA CUDA 12** is the compatibility choice for systems with CUDA 12 drivers. Use **CUDA 13** when your NVIDIA driver and toolkit support CUDA 13. +- **AMD ROCm** is for supported AMD GPUs, while **Intel** is for Intel GPUs with the required device runtime. +- **Jetson** uses the L4T ARM64 image. Choose its CUDA 12 image for Jetson AGX Orin-class devices or CUDA 13 for DGX Spark. +- **Vulkan** works across vendors and is the fallback when no matching CUDA, ROCm, or Intel image is available. + **NVIDIA CUDA 13:** ```bash docker run -ti --name local-ai -p 8080:8080 --gpus all localai/localai:latest-gpu-nvidia-cuda-13 diff --git a/docs/content/getting-started/install.md b/docs/content/getting-started/install.md index d9d76161c..861bba652 100644 --- a/docs/content/getting-started/install.md +++ b/docs/content/getting-started/install.md @@ -10,7 +10,9 @@ LocalAI can be installed in multiple ways depending on your platform and prefere ## Video Walkthrough -[![Installation Video](https://img.youtube.com/vi/cMVNnlqwfw4/maxresdefault.jpg)](https://www.youtube.com/watch?v=cMVNnlqwfw4) +
+ +
## Installation Methods @@ -21,23 +23,3 @@ Choose the installation method that best suits your needs: 3. **[Linux]({{% relref "getting-started/linux" %}})** - Install on Linux using binaries 4. **[Kubernetes]({{% relref "getting-started/kubernetes" %}})** - Deploy LocalAI on Kubernetes clusters 5. **[Build from Source]({{% relref "getting-started/build" %}})** - Build LocalAI from source code - -## Quick Start - -**Recommended: Containers (Docker or Podman)** - -```bash -# With Docker -docker run -p 8080:8080 --name local-ai -ti localai/localai:latest - -# Or with Podman -podman run -p 8080:8080 --name local-ai -ti localai/localai:latest -``` - -This will start LocalAI. The API will be available at `http://localhost:8080`. - -For other platforms: -- **macOS**: Download the [DMG]({{% relref "getting-started/macos" %}}) -- **Linux**: See the [Linux installation guide]({{% relref "getting-started/linux" %}}) for binary installation. - -For detailed instructions, see the [Containers installation guide]({{% relref "getting-started/containers" %}}). diff --git a/website/layouts/index.html b/website/layouts/index.html index 9bc5a69cc..22137a23c 100644 --- a/website/layouts/index.html +++ b/website/layouts/index.html @@ -9,11 +9,12 @@

Open source · MIT · v4.8.0

Make AI run onevery machine.

-

Text, voice, vision, images, video, 3D and agents, from one open runtime. It works on the laptop you already own, and scales to a room full of GPUs when you have one. When the engine we need is too heavy, too closed, or does not exist, we write it.

+

Run text, voice, vision, image, video, 3D and agent workloads through one open runtime. Start on the laptop you already own, keep your data on your hardware, and scale to a room full of GPUs when you need more capacity.

Install LocalAI Read the docs ★ Star on GitHub + Talk to us about your business
0GitHub stars
@@ -37,7 +38,7 @@

The runtime

-

Everything else plugs into LocalAI.

+

Drop-in replacement for most upstream APIs.

One binary with an OpenAI-compatible API in front of it. Point an existing client at it and the calls keep working, except now the model is on your machine. It also speaks the Anthropic, Ollama and ElevenLabs APIs, so most tools need a URL change and nothing else.

The engine behind that API is swappable. One model can run on llama.cpp while the next loads on vLLM, SGLang or MLX, and the client never notices: same endpoint, same request, different engine underneath. Switching is one line in the model's config.

A small core pulls each engine in as a separate backend, only when a model asks for it. That is why one install covers this much ground without becoming a 9 GB download.

@@ -66,6 +67,27 @@
+ + +

See things

Ask for "the red mug on the left" in plain language and get back coordinates, not a caption.

-
locate-anything.cpprf-detr.cpp
+
locate-anything.cpprf-detr.cpp

See space

Distance in metres from one ordinary photo, and a full 3D reconstruction from a handful of them. No rig, no camera poses, no GPU.

-
depth-anything.cppfree-splatter.cpptrellis2.cpp
+
depth-anything.cppfree-splatter.cpptrellis2.cpp

Speak

Long-form speech in a cloned voice, across dozens of languages, up to 48 kHz.

-
moss-tts.cppmagpie-tts.cppvibevoice.cppvoxtral-tts.c
+
moss-tts.cppmagpie-tts.cppvibevoice.cppvoxtral-tts.c

Hear clearly

Echo cancellation, noise suppression and dereverberation, so a voice loop survives a real room with a real speaker in it.

-
LocalVQE
+
LocalVQE

Forget on purpose

Names, addresses and card numbers get caught and redacted on the machine, before anything is sent anywhere.

-
privacy-filter.cpp
+
privacy-filter.cpp

One session can do all of it at once: hear the room, work out who is talking, read what is on the desk, call a tool, and answer out loud. One API, one machine, nothing leaves the building.

@@ -160,101 +182,6 @@ - - -
@@ -409,24 +336,6 @@ DeutschEspañolfrançais日本語 한국어PortuguêsРусский中文
- {{/* The strongest sentence in this section is somebody else's, so it opens - the section rather than closing it. Everything below is supporting - evidence for what these three people already said. */}} -

What other people say

- {{/* Names run as a sentence rather than a grid of pills. A pill wall of employers reads as a customer logo wall, which is a claim we are not @@ -535,7 +444,7 @@

Running in about a minute.

A container on any platform, a DMG on macOS, a binary on Linux, or a chart on Kubernetes. Backends download themselves the first time a model asks for one, so the base install stays small.

diff --git a/website/static/css/site.css b/website/static/css/site.css index 7af569363..59ed397ad 100644 --- a/website/static/css/site.css +++ b/website/static/css/site.css @@ -67,7 +67,7 @@ h1,h2,h3{margin:0;font-family:var(--display),system-ui,sans-serif;font-weight:70 section{position:relative;padding:var(--band) 0} .navy{background:rgba(4,19,28,var(--veil))} .surf{background:var(--navy1)} .deepbg{background:var(--deep)} .navy h1,.navy h2,.navy h3,.navy .lede,.navy p,.navy .kicker{text-shadow:var(--glowtext)} -.navy .mono,.navy .chips span,.navy .apis span,.navy .sn__e span{text-shadow:0 1px 10px rgba(4,19,28,.85)} +.navy .mono,.navy .chips span,.navy .apis span,.navy .sn__e a{text-shadow:0 1px 10px rgba(4,19,28,.85)} #field{position:fixed;inset:0;z-index:0;pointer-events:none;opacity:1;transition:opacity .7s ease} .top,main,footer{position:relative;z-index:1} .paper{background:var(--paper);color:var(--p-ink)} @@ -192,9 +192,9 @@ h2{font-size:clamp(2.1rem,5vw,3.9rem)} .sn__v u{text-decoration:none;color:var(--faint)} .sn p{color:var(--dim);font-size:.96rem;max-width:54ch} .sn__e{display:flex;flex-wrap:wrap;gap:.35rem} -.sn__e span{font-family:'Geist Mono',monospace;font-size:.63rem;color:var(--dim); +.sn__e a{font-family:'Geist Mono',monospace;font-size:.63rem;color:var(--dim); border:1px solid var(--line);padding:.24rem .5rem;border-radius:999px} -.sn:hover .sn__e span{border-color:var(--cyan);color:var(--ink)} +.sn:hover .sn__e a{border-color:var(--cyan);color:var(--ink)} /* made with */ .made{display:grid;gap:clamp(2rem,4vw,3.2rem);align-items:center;margin-top:2.6rem} @@ -396,6 +396,7 @@ tbody tr:hover td{background:rgba(95,205,228,.10)} .term__b{display:flex;gap:.5rem;align-items:center;padding:.6rem .85rem;border-bottom:1px solid var(--line2); font-family:'Geist Mono',monospace;font-size:.63rem;color:var(--faint)} .term pre{margin:0;padding:1.2rem;overflow-x:auto;font-family:'Geist Mono',monospace;font-size:.83rem;line-height:1.95} +.pane{min-height:17rem} .term .p{color:var(--cyan)} .term .c{color:var(--cyan-hi)} .term .o{color:var(--dim)} .term .h{color:var(--ink)} .cpy{margin-left:auto;font-family:'Geist Mono',monospace;font-size:.63rem;color:var(--cyan); background:none;border:0;cursor:pointer;padding:0}