diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md
index 3b31aa30..053fced8 100644
--- a/.github/ISSUE_TEMPLATE/bug-report.md
+++ b/.github/ISSUE_TEMPLATE/bug-report.md
@@ -7,7 +7,7 @@ assignees: ''
---
> [!IMPORTANT]
-> If you have questions about llama-swap please post in the Q&A in Discussions. Use bug reports when you've found a defect and wish to discuss a fix.
+> If you have questions about llmsnap please post in the Q&A in Discussions. Use bug reports when you've found a defect and wish to discuss a fix.
**Describe the bug**
A clear and concise description of what the bug is.
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index d479a6aa..2df1bec7 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -69,7 +69,7 @@ jobs:
uses: peter-evans/repository-dispatch@v2
with:
token: ${{ secrets.TAP_REPO_PAT }}
- repository: mostlygeek/homebrew-llama-swap
+ repository: napmany/homebrew-llmsnap
event-type: new-release
client-payload: |
{
diff --git a/.gitignore b/.gitignore
index 3c8fa185..bc71ff79 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,5 @@ dist/
.vscode
.DS_Store
.dev/
+config*.yaml
+!config.example.yaml
diff --git a/CLAUDE.md b/CLAUDE.md
index c6953f3c..64198840 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -1,8 +1,8 @@
-# Project: llama-swap
+# Project: llmsnap
## Project Description:
-llama-swap is a light weight, transparent proxy server that provides automatic model swapping to llama.cpp's server.
+llmsnap is a light weight, transparent proxy server that provides automatic model swapping to vllm, llama.cpp and other OpenAI compatible servers.
## Tech stack
diff --git a/Makefile b/Makefile
index 4d584433..ae31b111 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
# Define variables for the application
-APP_NAME = llama-swap
+APP_NAME = llmsnap
BUILD_DIR = build
# Get the current Git hash
diff --git a/README.md b/README.md
index 9b60e901..36b225a1 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,14 @@
-
-
-
-
+
+
+
+
+
-# llama-swap
+# llmsnap
-Run multiple LLM models on your machine and hot-swap between them as needed. llama-swap works with any OpenAI API-compatible server, giving you the flexibility to switch models without restarting your applications.
+Run multiple LLM models on your machine and hot-swap between them as needed. llmsnap works with any OpenAI API-compatible server, giving you the flexibility to switch models without restarting your applications.
-Built in Go for performance and simplicity, llama-swap has zero dependencies and is incredibly easy to set up. Get started in minutes - just one binary and one configuration file.
+Built in Go for performance and simplicity, llmsnap has zero dependencies and is incredibly easy to set up. Get started in minutes - just one binary and one configuration file.
## Features:
@@ -25,7 +26,7 @@ Built in Go for performance and simplicity, llama-swap has zero dependencies and
- `v1/rerank`, `v1/reranking`, `/rerank`
- `/infill` - for code infilling
- `/completion` - for completion endpoint
-- ✅ llama-swap API
+- ✅ llmsnap API
- `/ui` - web UI
- `/upstream/:model_id` - direct access to upstream server ([demo](https://github.com/mostlygeek/llama-swap/pull/31))
- `/models/unload` - manually unload running models ([#58](https://github.com/mostlygeek/llama-swap/issues/58))
@@ -42,7 +43,7 @@ Built in Go for performance and simplicity, llama-swap has zero dependencies and
### Web UI
-llama-swap includes a real time web interface for monitoring logs and controlling models:
+llmsnap includes a real time web interface for monitoring logs and controlling models:
@@ -53,26 +54,25 @@ The Activity Page shows recent requests:
## Installation
-llama-swap can be installed in multiple ways
+llmsnap can be installed in multiple ways
1. Docker
2. Homebrew (OSX and Linux)
-3. WinGet
-4. From release binaries
-5. From source
+3. From release binaries
+4. From source
-### Docker Install ([download images](https://github.com/mostlygeek/llama-swap/pkgs/container/llama-swap))
+### Docker Install ([download images](https://github.com/napmany/llmsnap/pkgs/container/llmsnap))
-Nightly container images with llama-swap and llama-server are built for multiple platforms (cuda, vulkan, intel, etc).
+Nightly container images with llmsnap and llama-server are built for multiple platforms (cuda, vulkan, intel, etc).
```shell
-$ docker pull ghcr.io/mostlygeek/llama-swap:cuda
+$ docker pull ghcr.io/napmany/llmsnap:cuda
# run with a custom configuration and models directory
$ docker run -it --rm --runtime nvidia -p 9292:8080 \
-v /path/to/models:/models \
-v /path/to/custom/config.yaml:/app/config.yaml \
- ghcr.io/mostlygeek/llama-swap:cuda
+ ghcr.io/napmany/llmsnap:cuda
```
@@ -82,14 +82,14 @@ more examples
```shell
# pull latest images per platform
-docker pull ghcr.io/mostlygeek/llama-swap:cpu
-docker pull ghcr.io/mostlygeek/llama-swap:cuda
-docker pull ghcr.io/mostlygeek/llama-swap:vulkan
-docker pull ghcr.io/mostlygeek/llama-swap:intel
-docker pull ghcr.io/mostlygeek/llama-swap:musa
+docker pull ghcr.io/napmany/llmsnap:cpu
+docker pull ghcr.io/napmany/llmsnap:cuda
+docker pull ghcr.io/napmany/llmsnap:vulkan
+docker pull ghcr.io/napmany/llmsnap:intel
+docker pull ghcr.io/napmany/llmsnap:musa
-# tagged llama-swap, platform and llama-server version images
-docker pull ghcr.io/mostlygeek/llama-swap:v166-cuda-b6795
+# tagged llmsnap, platform and llama-server version images
+docker pull ghcr.io/napmany/llmsnap:v166-cuda-b6795
```
@@ -98,34 +98,21 @@ docker pull ghcr.io/mostlygeek/llama-swap:v166-cuda-b6795
### Homebrew Install (macOS/Linux)
```shell
-brew tap mostlygeek/llama-swap
-brew install llama-swap
-llama-swap --config path/to/config.yaml --listen localhost:8080
-```
-
-### WinGet Install (Windows)
-
-> [!NOTE]
-> WinGet is maintained by community contributor [Dvd-Znf](https://github.com/Dvd-Znf) ([#327](https://github.com/mostlygeek/llama-swap/issues/327)). It is not an official part of llama-swap.
-
-```shell
-# install
-C:\> winget install llama-swap
-
-# upgrade
-C:\> winget upgrade llama-swap
+brew tap napmany/llmsnap
+brew install llmsnap
+llmsnap --config path/to/config.yaml --listen localhost:8080
```
### Pre-built Binaries
-Binaries are available on the [release](https://github.com/mostlygeek/llama-swap/releases) page for Linux, Mac, Windows and FreeBSD.
+Binaries are available on the [release](https://github.com/napmany/llmsnap/releases) page for Linux, Mac, Windows and FreeBSD.
### Building from source
1. Building requires Go and Node.js (for UI).
-1. `git clone https://github.com/mostlygeek/llama-swap.git`
+1. `git clone https://github.com/napmany/llmsnap.git`
1. `make clean all`
-1. look in the `build/` subdirectory for the llama-swap binary
+1. look in the `build/` subdirectory for the llmsnap binary
## Configuration
@@ -161,35 +148,35 @@ Almost all configuration settings are optional and can be added one step at a ti
See the [configuration documentation](docs/configuration.md) for all options.
-## How does llama-swap work?
+## How does llmsnap work?
-When a request is made to an OpenAI compatible endpoint, llama-swap will extract the `model` value and load the appropriate server configuration to serve it. If the wrong upstream server is running, it will be replaced with the correct one. This is where the "swap" part comes in. The upstream server is automatically swapped to handle the request correctly.
+When a request is made to an OpenAI compatible endpoint, llmsnap will extract the `model` value and load the appropriate server configuration to serve it. If the wrong upstream server is running, it will be replaced with the correct one. This is where the "swap" part comes in. The upstream server is automatically swapped to handle the request correctly.
-In the most basic configuration llama-swap handles one model at a time. For more advanced use cases, the `groups` feature allows multiple models to be loaded at the same time. You have complete control over how your system resources are used.
+In the most basic configuration llmsnap handles one model at a time. For more advanced use cases, the `groups` feature allows multiple models to be loaded at the same time. You have complete control over how your system resources are used.
## Reverse Proxy Configuration (nginx)
-If you deploy llama-swap behind nginx, disable response buffering for streaming endpoints. By default, nginx buffers responses which breaks Server‑Sent Events (SSE) and streaming chat completion. ([#236](https://github.com/mostlygeek/llama-swap/issues/236))
+If you deploy llmsnap behind nginx, disable response buffering for streaming endpoints. By default, nginx buffers responses which breaks Server‑Sent Events (SSE) and streaming chat completion. ([#236](https://github.com/mostlygeek/llama-swap/issues/236))
Recommended nginx configuration snippets:
```nginx
# SSE for UI events/logs
location /api/events {
- proxy_pass http://your-llama-swap-backend;
+ proxy_pass http://your-llmsnap-backend;
proxy_buffering off;
proxy_cache off;
}
# Streaming chat completions (stream=true)
location /v1/chat/completions {
- proxy_pass http://your-llama-swap-backend;
+ proxy_pass http://your-llmsnap-backend;
proxy_buffering off;
proxy_cache off;
}
```
-As a safeguard, llama-swap also sets `X-Accel-Buffering: no` on SSE responses. However, explicitly disabling `proxy_buffering` at your reverse proxy is still recommended for reliable streaming behavior.
+As a safeguard, llmsnap also sets `X-Accel-Buffering: no` on SSE responses. However, explicitly disabling `proxy_buffering` at your reverse proxy is still recommended for reliable streaming behavior.
## Monitoring Logs on the CLI
@@ -215,7 +202,7 @@ curl -Ns 'http://host/logs/stream?no-history'
## Do I need to use llama.cpp's server (llama-server)?
-Any OpenAI compatible server would work. llama-swap was originally designed for llama-server and it is the best supported.
+Any OpenAI compatible server would work.
For Python based inference servers like vllm or tabbyAPI it is recommended to run them via podman or docker. This provides clean environment isolation as well as responding correctly to `SIGTERM` signals for proper shutdown.
@@ -224,4 +211,4 @@ For Python based inference servers like vllm or tabbyAPI it is recommended to ru
> [!NOTE]
> ⭐️ Star this project to help others discover it!
-[](https://www.star-history.com/#mostlygeek/llama-swap&Date)
+[](https://www.star-history.com/#napmany/llmsnap&Date)
diff --git a/ai-plans/issue-264-add-metadata.md b/ai-plans/issue-264-add-metadata.md
index 215c695c..77384f45 100644
--- a/ai-plans/issue-264-add-metadata.md
+++ b/ai-plans/issue-264-add-metadata.md
@@ -85,8 +85,8 @@ The metadata will be schemaless, allowing users to define any key-value pairs th
**Required Changes:**
-- Add metadata to each model record under the key `llamaswap_meta`
-- Only include `llamaswap_meta` if metadata is non-empty
+- Add metadata to each model record under the key `llmsnap_meta`
+- Only include `llmsnap_meta` if metadata is non-empty
- Preserve all types when marshaling to JSON
- Maintain existing sorting by model ID
@@ -100,10 +100,10 @@ The metadata will be schemaless, allowing users to define any key-value pairs th
"id": "llama",
"object": "model",
"created": 1234567890,
- "owned_by": "llama-swap",
+ "owned_by": "llmsnap",
"name": "llama 3.1 8B",
"description": "A small but capable model",
- "llamaswap_meta": {
+ "llmsnap_meta": {
"port": 10001,
"temperature": 0.7,
"note": "The llama is running on port 10001 temp=0.7, context=16384",
@@ -180,8 +180,8 @@ The metadata will be schemaless, allowing users to define any key-value pairs th
**Test Cases:**
-- Model with metadata → verify `llamaswap_meta` key appears
-- Model without metadata → verify `llamaswap_meta` key is absent
+- Model with metadata → verify `llmsnap_meta` key appears
+- Model without metadata → verify `llmsnap_meta` key is absent
- Verify all types are correctly marshaled to JSON
- Verify nested structures are preserved
- Verify macro substitution has occurred before serialization
@@ -230,8 +230,8 @@ The metadata will be schemaless, allowing users to define any key-value pairs th
### API Response Changes
- [x] Modify `listModelsHandler()` in [proxy/proxymanager.go:350](proxy/proxymanager.go#L350)
-- [x] Add `llamaswap_meta` field to model records when metadata exists
-- [x] Ensure empty metadata results in omitted `llamaswap_meta` key
+- [x] Add `llmsnap_meta` field to model records when metadata exists
+- [x] Ensure empty metadata results in omitted `llmsnap_meta` key
- [x] Verify JSON marshaling preserves all types correctly
### Testing - Config Package
@@ -257,7 +257,7 @@ The metadata will be schemaless, allowing users to define any key-value pairs th
- [x] Update `TestProxyManager_ListModelsHandler` in [proxy/proxymanager_test.go](proxy/proxymanager_test.go)
- [x] Add test case for model with metadata
- [x] Add test case for model without metadata
-- [x] Verify `llamaswap_meta` key presence/absence
+- [x] Verify `llmsnap_meta` key presence/absence
- [x] Verify type preservation in JSON output
- [x] Verify macro substitution has occurred
@@ -274,10 +274,10 @@ None identified. The plan references the correct existing example in [config.exa
### Design Decisions
-1. **Why `llamaswap_meta` instead of merging into record?**
+1. **Why `llmsnap_meta` instead of merging into record?**
- Avoids potential collisions with OpenAI API standard fields
- - Makes it clear this is llama-swap specific metadata
+ - Makes it clear this is llmsnap specific metadata
- Easier for clients to distinguish standard vs. custom fields
2. **Why support nested structures?**
diff --git a/cmd/misc/benchmark-chatcompletion/main.go b/cmd/misc/benchmark-chatcompletion/main.go
index 807a9062..cf3820d3 100644
--- a/cmd/misc/benchmark-chatcompletion/main.go
+++ b/cmd/misc/benchmark-chatcompletion/main.go
@@ -1,7 +1,7 @@
package main
// created for issue: #252 https://github.com/mostlygeek/llama-swap/issues/252
-// this simple benchmark tool sends a lot of small chat completion requests to llama-swap
+// this simple benchmark tool sends a lot of small chat completion requests to llmsnap
// to make sure all the requests are accounted for.
//
// requests can be sent in parallel, and the tool will report the results.
diff --git a/cmd/simple-responder/simple-responder.go b/cmd/simple-responder/simple-responder.go
index 5167b344..e1920233 100644
--- a/cmd/simple-responder/simple-responder.go
+++ b/cmd/simple-responder/simple-responder.go
@@ -123,7 +123,7 @@ func main() {
})
// for issue #62 to check model name strips profile slug
- // has to be one of the openAI API endpoints that llama-swap proxies
+ // has to be one of the openAI API endpoints that llmsnap proxies
// curl http://localhost:8080/v1/audio/speech -d '{"model":"profile:TheExpectedModel"}'
r.POST("/v1/audio/speech", func(c *gin.Context) {
body, err := io.ReadAll(c.Request.Body)
diff --git a/cmd/wol-proxy/README.md b/cmd/wol-proxy/README.md
index 65d2467c..2e4ce899 100644
--- a/cmd/wol-proxy/README.md
+++ b/cmd/wol-proxy/README.md
@@ -1,8 +1,8 @@
# wol-proxy
-wol-proxy automatically wakes up a suspended llama-swap server using Wake-on-LAN when requests are received.
+wol-proxy automatically wakes up a suspended llmsnap server using Wake-on-LAN when requests are received.
-When a request arrives and llama-swap is unavailable, wol-proxy sends a WOL packet and holds the request until the server becomes available. If the server doesn't respond within the timeout period (default: 60 seconds), the request is dropped.
+When a request arrives and llmsnap is unavailable, wol-proxy sends a WOL packet and holds the request until the server becomes available. If the server doesn't respond within the timeout period (default: 60 seconds), the request is dropped.
This utility helps conserve energy by allowing GPU-heavy servers to remain suspended when idle, as they can consume hundreds of watts even when not actively processing requests.
diff --git a/config-schema.json b/config-schema.json
index d7dffa6c..afc920c6 100644
--- a/config-schema.json
+++ b/config-schema.json
@@ -1,8 +1,8 @@
{
"$schema": "https://json-schema.org/draft-07/schema#",
- "$id": "llama-swap-config-schema.json",
- "title": "llama-swap configuration",
- "description": "Configuration file for llama-swap",
+ "$id": "llmsnap-config-schema.json",
+ "title": "llmsnap configuration",
+ "description": "Configuration file for llmsnap",
"type": "object",
"required": [
"models"
@@ -164,7 +164,7 @@
"type": "string",
"default": "http://localhost:${PORT}",
"format": "uri",
- "description": "URL where llama-swap routes API requests. If custom port is used in cmd, this must be set."
+ "description": "URL where llmsnap routes API requests. If custom port is used in cmd, this must be set."
},
"aliases": {
"type": "array",
diff --git a/config.example.yaml b/config.example.yaml
index 6949bbe3..3ad4ff92 100644
--- a/config.example.yaml
+++ b/config.example.yaml
@@ -1,8 +1,8 @@
# add this modeline for validation in vscode
-# yaml-language-server: $schema=https://raw.githubusercontent.com/mostlygeek/llama-swap/refs/heads/main/config-schema.json
+# yaml-language-server: $schema=https://raw.githubusercontent.com/napmany/llmsnap/refs/heads/main/config-schema.json
#
-# llama-swap YAML configuration example
-# -------------------------------------
+# llmsnap YAML configuration example
+# -----------------------------------
#
# 💡 Tip - Use an LLM with this file!
# ====================================
@@ -12,7 +12,7 @@
# ====================================
# Usage notes:
-# - Below are all the available configuration options for llama-swap.
+# - Below are all the available configuration options for llmsnap.
# - Settings noted as "required" must be in your configuration file
# - Settings noted as "optional" can be omitted
@@ -142,7 +142,7 @@ models:
env:
- "CUDA_VISIBLE_DEVICES=0,1,2"
- # proxy: the URL where llama-swap routes API requests
+ # proxy: the URL where llmsnap routes API requests
# - optional, default: http://localhost:${PORT}
# - if you used ${PORT} in cmd this can be omitted
# - if you use a custom port in cmd this *must* be set
@@ -249,7 +249,7 @@ models:
# - useful for stopping commands managed by another system
# - the upstream's process id is available in the ${PID} macro
#
- # When empty, llama-swap has this default behaviour:
+ # When empty, llmsnap has this default behaviour:
# - on POSIX systems: a SIGTERM signal is sent
# - on Windows, calls taskkill to stop the process
# - processes have 5 seconds to shutdown until forceful termination is attempted
@@ -353,8 +353,8 @@ models:
#
# NOTE: the example below uses model names that are not defined above for demonstration purposes
groups:
- # group1 works the same as the default behaviour of llama-swap where only one model is allowed
- # to run a time across the whole llama-swap instance
+ # group1 works the same as the default behaviour of llmsnap where only one model is allowed
+ # to run a time across the whole llmsnap instance
"group1":
# swap: controls the model swapping behaviour in within the group
# - optional, default: true
diff --git a/docker/build-container.sh b/docker/build-container.sh
index 38e99360..1479d990 100755
--- a/docker/build-container.sh
+++ b/docker/build-container.sh
@@ -48,7 +48,7 @@ fi
CONTAINER_TAG="ghcr.io/napmany/llmsnap:v${LS_VER}-${ARCH}-${LCPP_TAG}"
CONTAINER_LATEST="ghcr.io/napmany/llmsnap:${ARCH}"
echo "Building ${CONTAINER_TAG} $LS_VER"
-docker build -f llama-swap.Containerfile --build-arg BASE_TAG=${BASE_TAG} --build-arg LS_VER=${LS_VER} -t ${CONTAINER_TAG} -t ${CONTAINER_LATEST} .
+docker build -f llmsnap.Containerfile --build-arg BASE_TAG=${BASE_TAG} --build-arg LS_VER=${LS_VER} -t ${CONTAINER_TAG} -t ${CONTAINER_LATEST} .
if [ "$PUSH_IMAGES" == "true" ]; then
docker push ${CONTAINER_TAG}
docker push ${CONTAINER_LATEST}
diff --git a/docker/llama-swap.Containerfile b/docker/llmsnap.Containerfile
similarity index 69%
rename from docker/llama-swap.Containerfile
rename to docker/llmsnap.Containerfile
index 29f35802..9e511db2 100644
--- a/docker/llama-swap.Containerfile
+++ b/docker/llmsnap.Containerfile
@@ -28,11 +28,11 @@ USER $UID:$GID
WORKDIR /app
RUN \
- curl -LO https://github.com/mostlygeek/llama-swap/releases/download/v"${LS_VER}"/llama-swap_"${LS_VER}"_linux_amd64.tar.gz && \
- tar -zxf llama-swap_"${LS_VER}"_linux_amd64.tar.gz && \
- rm llama-swap_"${LS_VER}"_linux_amd64.tar.gz
+ curl -LO https://github.com/napmany/llmsnap/releases/download/v"${LS_VER}"/llmsnap_"${LS_VER}"_linux_amd64.tar.gz && \
+ tar -zxf llmsnap_"${LS_VER}"_linux_amd64.tar.gz && \
+ rm llmsnap_"${LS_VER}"_linux_amd64.tar.gz
COPY --chown=$UID:$GID config.example.yaml /app/config.yaml
HEALTHCHECK CMD curl -f http://localhost:8080/ || exit 1
-ENTRYPOINT [ "/app/llama-swap", "-config", "/app/config.yaml" ]
+ENTRYPOINT [ "/app/llmsnap", "-config", "/app/config.yaml" ]
diff --git a/docs/configuration.md b/docs/configuration.md
index b938d52f..5bc975fe 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -1,6 +1,6 @@
# config.yaml
-llama-swap is designed to be very simple: one binary, one configuration file.
+llmsnap is designed to be very simple: one binary, one configuration file.
## minimal viable config
@@ -10,7 +10,7 @@ models:
cmd: llama-server --port ${PORT} --model /path/to/model.gguf
```
-This is enough to launch `llama-server` to serve `model1`. Of course, llama-swap is about making it possible to serve many models:
+This is enough to launch `llama-server` to serve `model1`. Of course, llmsnap is about making it possible to serve many models:
```yaml
models:
@@ -26,7 +26,7 @@ With this configuration models will be hot swapped and loaded on demand. The spe
## Advanced control with `cmd`
-llama-swap is also about customizability. You can use any CLI flag available:
+llmsnap is also about customizability. You can use any CLI flag available:
```yaml
models:
@@ -41,7 +41,7 @@ models:
## Support for any OpenAI API compatible server
-llama-swap supports any OpenAI API compatible server. If you can run it on the CLI llama-swap will be able to manage it. Even if it's run in Docker or Podman containers.
+llmsnap supports any OpenAI API compatible server. If you can run it on the CLI llmsnap will be able to manage it. Even if it's run in Docker or Podman containers.
```yaml
models:
@@ -70,7 +70,7 @@ models:
## Many more features..
-llama-swap supports many more features to customize how you want to manage your environment.
+llmsnap supports many more features to customize how you want to manage your environment.
| Feature | Description |
| ------------- | ---------------------------------------------- |
@@ -90,8 +90,8 @@ llama-swap supports many more features to customize how you want to manage your
> This is a copy of `config.example.yaml`. Always check that for the most up to date examples.
```yaml
-# llama-swap YAML configuration example
-# -------------------------------------
+# llmsnap YAML configuration example
+# -----------------------------------
#
# 💡 Tip - Use an LLM with this file!
# ====================================
@@ -101,7 +101,7 @@ llama-swap supports many more features to customize how you want to manage your
# ====================================
# Usage notes:
-# - Below are all the available configuration options for llama-swap.
+# - Below are all the available configuration options for llmsnap.
# - Settings noted as "required" must be in your configuration file
# - Settings noted as "optional" can be omitted
@@ -209,7 +209,7 @@ models:
env:
- "CUDA_VISIBLE_DEVICES=0,1,2"
- # proxy: the URL where llama-swap routes API requests
+ # proxy: the URL where llmsnap routes API requests
# - optional, default: http://localhost:${PORT}
# - if you used ${PORT} in cmd this can be omitted
# - if you use a custom port in cmd this *must* be set
@@ -312,7 +312,7 @@ models:
# - useful for stopping commands managed by another system
# - the upstream's process id is available in the ${PID} macro
#
- # When empty, llama-swap has this default behaviour:
+ # When empty, llmsnap has this default behaviour:
# - on POSIX systems: a SIGTERM signal is sent
# - on Windows, calls taskkill to stop the process
# - processes have 5 seconds to shutdown until forceful termination is attempted
@@ -416,8 +416,8 @@ models:
#
# NOTE: the example below uses model names that are not defined above for demonstration purposes
groups:
- # group1 works the same as the default behaviour of llama-swap where only one model is allowed
- # to run a time across the whole llama-swap instance
+ # group1 works the same as the default behaviour of llmsnap where only one model is allowed
+ # to run a time across the whole llmsnap instance
"group1":
# swap: controls the model swapping behaviour in within the group
# - optional, default: true
diff --git a/docs/examples/README.md b/docs/examples/README.md
index 71bbdd2e..53a02f21 100644
--- a/docs/examples/README.md
+++ b/docs/examples/README.md
@@ -1,6 +1,6 @@
# Example Configs and Use Cases
-A collections of usecases and examples for getting the most out of llama-swap.
+A collections of usecases and examples for getting the most out of llmsnap.
* [Speculative Decoding](speculative-decoding/README.md) - using a small draft model can increase inference speeds from 20% to 40%. This example includes a configurations Qwen2.5-Coder-32B (2.5x increase) and Llama-3.1-70B (1.4x increase) in the best cases.
* [Optimizing Code Generation](benchmark-snakegame/README.md) - find the optimal settings for your machine. This example demonstrates defining multiple configurations and testing which one is fastest.
\ No newline at end of file
diff --git a/docs/examples/aider-qwq-coder/README.md b/docs/examples/aider-qwq-coder/README.md
index 8c5602c3..672a194b 100644
--- a/docs/examples/aider-qwq-coder/README.md
+++ b/docs/examples/aider-qwq-coder/README.md
@@ -1,12 +1,12 @@
-# aider, QwQ, Qwen-Coder 2.5 and llama-swap
+# aider, QwQ, Qwen-Coder 2.5 and llmsnap
-This guide show how to use aider and llama-swap to get a 100% local coding co-pilot setup. The focus is on the trickest part which is configuring aider, llama-swap and llama-server to work together.
+This guide show how to use aider and llmsnap to get a 100% local coding co-pilot setup. The focus is on the trickest part which is configuring aider, llmsnap and llama-server to work together.
## Here's what you you need:
- aider - [installation docs](https://aider.chat/docs/install.html)
- llama-server - [download latest release](https://github.com/ggml-org/llama.cpp/releases)
-- llama-swap - [download latest release](https://github.com/mostlygeek/llama-swap/releases)
+- llmsnap - [download latest release](https://github.com/napmany/llmsnap/releases)
- [QwQ 32B](https://huggingface.co/bartowski/Qwen_QwQ-32B-GGUF) and [Qwen Coder 2.5 32B](https://huggingface.co/bartowski/Qwen2.5-Coder-32B-Instruct-GGUF) models
- 24GB VRAM video card
@@ -24,7 +24,7 @@ aider --architect \
--openai-api-base "http://10.0.1.24:8080/v1" \
```
-Set `--openai-api-base` to the IP and port where your llama-swap is running.
+Set `--openai-api-base` to the IP and port where your llmsnap is running.
## Create an aider model settings file
@@ -32,7 +32,7 @@ Set `--openai-api-base` to the IP and port where your llama-swap is running.
# aider.model.settings.yml
#
-# !!! important: model names must match llama-swap configuration names !!!
+# !!! important: model names must match llmsnap configuration names !!!
#
- name: "openai/QwQ"
@@ -62,7 +62,7 @@ Set `--openai-api-base` to the IP and port where your llama-swap is running.
editor_model_name: "openai/qwen-coder-32B"
```
-## llama-swap configuration
+## llmsnap configuration
```yaml
# config.yaml
@@ -95,9 +95,9 @@ models:
## Advanced, Dual GPU Configuration
-If you have _dual 24GB GPUs_ you can use llama-swap profiles to avoid swapping between QwQ and Qwen Coder.
+If you have _dual 24GB GPUs_ you can use llmsnap profiles to avoid swapping between QwQ and Qwen Coder.
-In llama-swap's configuration file:
+In llmsnap's configuration file:
1. add a `profiles` section with `aider` as the profile name
2. using the `env` field to specify the GPU IDs for each model
diff --git a/docs/examples/aider-qwq-coder/aider.model.settings.dualgpu.yml b/docs/examples/aider-qwq-coder/aider.model.settings.dualgpu.yml
index 4cb09e23..64d61629 100644
--- a/docs/examples/aider-qwq-coder/aider.model.settings.dualgpu.yml
+++ b/docs/examples/aider-qwq-coder/aider.model.settings.dualgpu.yml
@@ -1,4 +1,4 @@
-# this makes use of llama-swap's profile feature to
+# this makes use of llmsnap's profile feature to
# keep the architect and editor models in VRAM on different GPUs
- name: "openai/aider:QwQ"
diff --git a/docs/examples/benchmark-snakegame/README.md b/docs/examples/benchmark-snakegame/README.md
index 93dd3b73..e0bc06b0 100644
--- a/docs/examples/benchmark-snakegame/README.md
+++ b/docs/examples/benchmark-snakegame/README.md
@@ -1,4 +1,4 @@
-# Optimizing Code Generation with llama-swap
+# Optimizing Code Generation with llmsnap
Finding the best mix of settings for your hardware can be time consuming. This example demonstrates using a custom configuration file to automate testing different scenarios to find the an optimal configuration.
@@ -105,7 +105,7 @@ models:
To run the benchmark, execute the following commands:
-1. `llama-swap -config benchmark-config.yaml`
+1. `llmsnap -config benchmark-config.yaml`
1. `./run-benchmark.sh http://localhost:8080 "3090-only" "3090-with-draft" "3090-P40-draft"`
The [benchmark script](run-benchmark.sh) generates a CSV output of the results, which can be converted to a Markdown table for readability.
diff --git a/docs/examples/restart-on-config-change/README.md b/docs/examples/restart-on-config-change/README.md
index 1f67aea1..54d2d1d2 100644
--- a/docs/examples/restart-on-config-change/README.md
+++ b/docs/examples/restart-on-config-change/README.md
@@ -1,11 +1,11 @@
-# Restart llama-swap on config change
+# Restart llmsnap on config change
-Sometimes editing the configuration file can take a bit of trail and error to get a model configuration tuned just right. The `watch-and-restart.sh` script can be used to watch `config.yaml` for changes and restart `llama-swap` when it detects a change.
+Sometimes editing the configuration file can take a bit of trail and error to get a model configuration tuned just right. The `watch-and-restart.sh` script can be used to watch `config.yaml` for changes and restart `llmsnap` when it detects a change.
```bash
#!/bin/bash
#
-# A simple watch and restart llama-swap when its configuration
+# A simple watch and restart llmsnap when its configuration
# file changes. Useful for trying out configuration changes
# without manually restarting the server each time.
if [ -z "$1" ]; then
@@ -15,9 +15,9 @@ fi
while true; do
# Start the process again
- ./llama-swap-linux-amd64 -config $1 -listen :1867 &
+ ./llmsnap-linux-amd64 -config $1 -listen :1867 &
PID=$!
- echo "Started llama-swap with PID $PID"
+ echo "Started llmsnap with PID $PID"
# Wait for modifications in the specified directory or file
inotifywait -e modify "$1"
@@ -38,14 +38,14 @@ done
```bash
$ ./watch-and-restart.sh config.yaml
-Started llama-swap with PID 495455
+Started llmsnap with PID 495455
Setting up watches.
Watches established.
-llama-swap listening on :1867
+llmsnap listening on :1867
Sending SIGTERM to 495455
-Shutting down llama-swap
-Started llama-swap with PID 495486
+Shutting down llmsnap
+Started llmsnap with PID 495486
Setting up watches.
Watches established.
-llama-swap listening on :1867
+llmsnap listening on :1867
```
diff --git a/docs/examples/speculative-decoding/README.md b/docs/examples/speculative-decoding/README.md
index ed20e8e7..b5ca8780 100644
--- a/docs/examples/speculative-decoding/README.md
+++ b/docs/examples/speculative-decoding/README.md
@@ -11,7 +11,7 @@ The models used are:
* [Bartowski Qwen2.5-Coder-32B-Instruct](https://huggingface.co/bartowski/Qwen2.5-Coder-32B-Instruct-GGUF)
* [Bartowski Qwen2.5-Coder-0.5B-Instruct](https://huggingface.co/bartowski/Qwen2.5-Coder-0.5B-Instruct-GGUF)
-The llama-swap configuration is as follows:
+The llmsnap configuration is as follows:
```yaml
models:
diff --git a/go.mod b/go.mod
index 63211149..09109200 100644
--- a/go.mod
+++ b/go.mod
@@ -1,4 +1,4 @@
-module github.com/mostlygeek/llama-swap
+module github.com/napmany/llmsnap
go 1.23.0
diff --git a/header.jpeg b/header.jpeg
index d0a32738..b8827ec0 100644
Binary files a/header.jpeg and b/header.jpeg differ
diff --git a/header2.png b/header2.png
deleted file mode 100644
index 3845b123..00000000
Binary files a/header2.png and /dev/null differ
diff --git a/llama-swap.go b/llama-swap.go
index 9706e07d..69f77863 100644
--- a/llama-swap.go
+++ b/llama-swap.go
@@ -14,9 +14,9 @@ import (
"github.com/fsnotify/fsnotify"
"github.com/gin-gonic/gin"
- "github.com/mostlygeek/llama-swap/event"
- "github.com/mostlygeek/llama-swap/proxy"
- "github.com/mostlygeek/llama-swap/proxy/config"
+ "github.com/napmany/llmsnap/event"
+ "github.com/napmany/llmsnap/proxy"
+ "github.com/napmany/llmsnap/proxy/config"
)
var (
@@ -193,10 +193,10 @@ func main() {
go func() {
var err error
if useTLS {
- fmt.Printf("llama-swap listening with TLS on https://%s\n", *listenStr)
+ fmt.Printf("llmsnap listening with TLS on https://%s\n", *listenStr)
err = srv.ListenAndServeTLS(*certFile, *keyFile)
} else {
- fmt.Printf("llama-swap listening on http://%s\n", *listenStr)
+ fmt.Printf("llmsnap listening on http://%s\n", *listenStr)
err = srv.ListenAndServe()
}
if err != nil && err != http.ErrServerClosed {
diff --git a/proxy/helpers_test.go b/proxy/helpers_test.go
index 95b8e6bd..6b8a7997 100644
--- a/proxy/helpers_test.go
+++ b/proxy/helpers_test.go
@@ -9,7 +9,7 @@ import (
"testing"
"github.com/gin-gonic/gin"
- "github.com/mostlygeek/llama-swap/proxy/config"
+ "github.com/napmany/llmsnap/proxy/config"
"gopkg.in/yaml.v3"
)
diff --git a/proxy/logMonitor.go b/proxy/logMonitor.go
index 9597c8a6..8343fb07 100644
--- a/proxy/logMonitor.go
+++ b/proxy/logMonitor.go
@@ -9,7 +9,7 @@ import (
"sync"
"time"
- "github.com/mostlygeek/llama-swap/event"
+ "github.com/napmany/llmsnap/event"
)
type LogLevel int
diff --git a/proxy/metrics_monitor.go b/proxy/metrics_monitor.go
index 360eb22f..359530d5 100644
--- a/proxy/metrics_monitor.go
+++ b/proxy/metrics_monitor.go
@@ -11,7 +11,7 @@ import (
"time"
"github.com/gin-gonic/gin"
- "github.com/mostlygeek/llama-swap/event"
+ "github.com/napmany/llmsnap/event"
"github.com/tidwall/gjson"
)
diff --git a/proxy/metrics_monitor_test.go b/proxy/metrics_monitor_test.go
index fb353884..40bfca4d 100644
--- a/proxy/metrics_monitor_test.go
+++ b/proxy/metrics_monitor_test.go
@@ -9,7 +9,7 @@ import (
"time"
"github.com/gin-gonic/gin"
- "github.com/mostlygeek/llama-swap/event"
+ "github.com/napmany/llmsnap/event"
"github.com/stretchr/testify/assert"
)
diff --git a/proxy/process.go b/proxy/process.go
index d87baa80..e6b14168 100644
--- a/proxy/process.go
+++ b/proxy/process.go
@@ -18,8 +18,8 @@ import (
"syscall"
"time"
- "github.com/mostlygeek/llama-swap/event"
- "github.com/mostlygeek/llama-swap/proxy/config"
+ "github.com/napmany/llmsnap/event"
+ "github.com/napmany/llmsnap/proxy/config"
)
type ProcessState string
@@ -446,7 +446,7 @@ func (p *Process) StopImmediately() {
p.stopCommand()
}
-// Shutdown is called when llama-swap is shutting down. It will give a little bit
+// Shutdown is called when llmsnap is shutting down. It will give a little bit
// of time for any inflight requests to complete before shutting down. If the Process
// is in the state of starting, it will cancel it and shut it down. Once a process is in
// the StateShutdown state, it can not be started again.
@@ -964,7 +964,7 @@ func newStatusResponseWriter(p *Process, w http.ResponseWriter) *statusResponseW
s.Header().Set("Connection", "keep-alive") // keep-alive
s.WriteHeader(http.StatusOK) // send status code 200
s.sendLine("━━━━━")
- s.sendLine(fmt.Sprintf("llama-swap loading model: %s", p.ID))
+ s.sendLine(fmt.Sprintf("llmsnap loading model: %s", p.ID))
return s
}
diff --git a/proxy/process_test.go b/proxy/process_test.go
index 0ec60969..c8700af2 100644
--- a/proxy/process_test.go
+++ b/proxy/process_test.go
@@ -10,7 +10,7 @@ import (
"testing"
"time"
- "github.com/mostlygeek/llama-swap/proxy/config"
+ "github.com/napmany/llmsnap/proxy/config"
"github.com/stretchr/testify/assert"
)
diff --git a/proxy/processgroup.go b/proxy/processgroup.go
index f4827b29..d9c5557b 100644
--- a/proxy/processgroup.go
+++ b/proxy/processgroup.go
@@ -6,7 +6,7 @@ import (
"slices"
"sync"
- "github.com/mostlygeek/llama-swap/proxy/config"
+ "github.com/napmany/llmsnap/proxy/config"
)
type ProcessGroup struct {
diff --git a/proxy/processgroup_test.go b/proxy/processgroup_test.go
index f10293ae..1de6d5eb 100644
--- a/proxy/processgroup_test.go
+++ b/proxy/processgroup_test.go
@@ -7,7 +7,7 @@ import (
"sync"
"testing"
- "github.com/mostlygeek/llama-swap/proxy/config"
+ "github.com/napmany/llmsnap/proxy/config"
"github.com/stretchr/testify/assert"
)
diff --git a/proxy/proxymanager.go b/proxy/proxymanager.go
index 39295e0b..967fa838 100644
--- a/proxy/proxymanager.go
+++ b/proxy/proxymanager.go
@@ -15,8 +15,8 @@ import (
"time"
"github.com/gin-gonic/gin"
- "github.com/mostlygeek/llama-swap/event"
- "github.com/mostlygeek/llama-swap/proxy/config"
+ "github.com/napmany/llmsnap/event"
+ "github.com/napmany/llmsnap/proxy/config"
"github.com/tidwall/gjson"
"github.com/tidwall/sjson"
)
@@ -414,7 +414,7 @@ func (pm *ProxyManager) listModelsHandler(c *gin.Context) {
"id": modelId,
"object": "model",
"created": createdTime,
- "owned_by": "llama-swap",
+ "owned_by": "llmsnap",
}
if name := strings.TrimSpace(modelConfig.Name); name != "" {
diff --git a/proxy/proxymanager_api.go b/proxy/proxymanager_api.go
index 1614781b..fd3b1b56 100644
--- a/proxy/proxymanager_api.go
+++ b/proxy/proxymanager_api.go
@@ -9,7 +9,7 @@ import (
"strings"
"github.com/gin-gonic/gin"
- "github.com/mostlygeek/llama-swap/event"
+ "github.com/napmany/llmsnap/event"
)
type Model struct {
diff --git a/proxy/proxymanager_test.go b/proxy/proxymanager_test.go
index c2f41f40..29513809 100644
--- a/proxy/proxymanager_test.go
+++ b/proxy/proxymanager_test.go
@@ -15,8 +15,8 @@ import (
"testing"
"time"
- "github.com/mostlygeek/llama-swap/event"
- "github.com/mostlygeek/llama-swap/proxy/config"
+ "github.com/napmany/llmsnap/event"
+ "github.com/napmany/llmsnap/proxy/config"
"github.com/stretchr/testify/assert"
"github.com/tidwall/gjson"
)
@@ -286,7 +286,7 @@ func TestProxyManager_ListModelsHandler(t *testing.T) {
ownedBy, ok := model["owned_by"].(string)
assert.True(t, ok, "owned_by should be a string")
- assert.Equal(t, "llama-swap", ownedBy)
+ assert.Equal(t, "llmsnap", ownedBy)
// check for optional name and description
if modelID == "model1" {
diff --git a/scripts/install.sh b/scripts/install.sh
index b3f8894c..a6549fd2 100644
--- a/scripts/install.sh
+++ b/scripts/install.sh
@@ -1,10 +1,10 @@
#!/bin/sh
-# This script installs llama-swap on Linux.
-# It detects the current operating system architecture and installs the appropriate version of llama-swap.
+# This script installs llmsnap on Linux.
+# It detects the current operating system architecture and installs the appropriate version of llmsnap.
set -eu
-LLAMA_SWAP_DEFAULT_ADDRESS=${LLAMA_SWAP_DEFAULT_ADDRESS:-"127.0.0.1:8080"}
+LLMSNAP_DEFAULT_ADDRESS=${LLMSNAP_DEFAULT_ADDRESS:-"127.0.0.1:8080"}
red="$( (/usr/bin/tput bold || :; /usr/bin/tput setaf 1 || :) 2>&-)"
plain="$( (/usr/bin/tput sgr0 || :) 2>&-)"
@@ -74,7 +74,7 @@ import urllib.request
ASSET_NAME = "${ASSET_NAME}"
-with urllib.request.urlopen("https://api.github.com/repos/mostlygeek/llama-swap/releases/latest") as resp:
+with urllib.request.urlopen("https://api.github.com/repos/napmany/llmsnap/releases/latest") as resp:
data = json.load(resp)
for asset in data.get("assets", []):
if ASSET_NAME in asset.get("name", ""):
@@ -85,7 +85,7 @@ with urllib.request.urlopen("https://api.github.com/repos/mostlygeek/llama-swap/
exit(1)
print("Downloading:", url, file=sys.stderr)
-output_path = os.path.join("${TMPDIR}", "llama-swap.tar.gz")
+output_path = os.path.join("${TMPDIR}", "llmsnap.tar.gz")
urllib.request.urlretrieve(url, output_path)
print(output_path)
EOF
@@ -97,34 +97,34 @@ EOF
fi
status "Extracting to /usr/local/bin"
- $SUDO tar -xzf "$TARFILE" -C /usr/local/bin llama-swap
+ $SUDO tar -xzf "$TARFILE" -C /usr/local/bin llmsnap
}
download_binary
configure_systemd() {
- if ! id llama-swap >/dev/null 2>&1; then
- status "Creating llama-swap user..."
- $SUDO useradd -r -s /bin/false -U -m -d /usr/share/llama-swap llama-swap
+ if ! id llmsnap >/dev/null 2>&1; then
+ status "Creating llmsnap user..."
+ $SUDO useradd -r -s /bin/false -U -m -d /usr/share/llmsnap llmsnap
fi
if getent group render >/dev/null 2>&1; then
- status "Adding llama-swap user to render group..."
- $SUDO usermod -a -G render llama-swap
+ status "Adding llmsnap user to render group..."
+ $SUDO usermod -a -G render llmsnap
fi
if getent group video >/dev/null 2>&1; then
- status "Adding llama-swap user to video group..."
- $SUDO usermod -a -G video llama-swap
+ status "Adding llmsnap user to video group..."
+ $SUDO usermod -a -G video llmsnap
fi
if getent group docker >/dev/null 2>&1; then
- status "Adding llama-swap user to docker group..."
- $SUDO usermod -a -G docker llama-swap
+ status "Adding llmsnap user to docker group..."
+ $SUDO usermod -a -G docker llmsnap
fi
- status "Adding current user to llama-swap group..."
- $SUDO usermod -a -G llama-swap "$(whoami)"
+ status "Adding current user to llmsnap group..."
+ $SUDO usermod -a -G llmsnap "$(whoami)"
- if [ ! -f "/usr/share/llama-swap/config.yaml" ]; then
+ if [ ! -f "/usr/share/llmsnap/config.yaml" ]; then
status "Creating default config.yaml..."
- cat </dev/null
+ cat </dev/null
# default 15s likely to fail for default models due to downloading models
healthCheckTimeout: 60
@@ -151,18 +151,18 @@ models:
EOF
fi
- status "Creating llama-swap systemd service..."
- cat </dev/null
+ status "Creating llmsnap systemd service..."
+ cat </dev/null
[Unit]
-Description=llama-swap
+Description=llmsnap
After=network.target
[Service]
-User=llama-swap
-Group=llama-swap
+User=llmsnap
+Group=llmsnap
# set this to match your environment
-ExecStart=/usr/local/bin/llama-swap --config /usr/share/llama-swap/config.yaml --watch-config -listen ${LLAMA_SWAP_DEFAULT_ADDRESS}
+ExecStart=/usr/local/bin/llmsnap --config /usr/share/llmsnap/config.yaml --watch-config -listen ${LLMSNAP_DEFAULT_ADDRESS}
Restart=on-failure
RestartSec=3
@@ -175,11 +175,11 @@ EOF
SYSTEMCTL_RUNNING="$(systemctl is-system-running || true)"
case $SYSTEMCTL_RUNNING in
running|degraded)
- status "Enabling and starting llama-swap service..."
+ status "Enabling and starting llmsnap service..."
$SUDO systemctl daemon-reload
- $SUDO systemctl enable llama-swap
+ $SUDO systemctl enable llmsnap
- start_service() { $SUDO systemctl restart llama-swap; }
+ start_service() { $SUDO systemctl restart llmsnap; }
trap start_service EXIT
;;
*)
@@ -196,8 +196,8 @@ if available systemctl; then
fi
install_success() {
- status "The llama-swap API is now available at http://${LLAMA_SWAP_DEFAULT_ADDRESS}"
- status 'Customize the config file at /usr/share/llama-swap/config.yaml.'
+ status "The llmsnap API is now available at http://${LLMSNAP_DEFAULT_ADDRESS}"
+ status 'Customize the config file at /usr/share/llmsnap/config.yaml.'
status 'Install complete.'
}
diff --git a/scripts/uninstall.sh b/scripts/uninstall.sh
index dd924906..d4dca644 100644
--- a/scripts/uninstall.sh
+++ b/scripts/uninstall.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-# This script uninstalls llama-swap on Linux.
-# It removes the binary, systemd service, config.yaml (optional), and llama-swap user and group.
+# This script uninstalls llmsnap on Linux.
+# It removes the binary, systemd service, config.yaml (optional), and llmsnap user and group.
set -eu
@@ -23,46 +23,46 @@ if [ "$(id -u)" -ne 0 ]; then
fi
configure_systemd() {
- status "Stopping llama-swap service..."
- $SUDO systemctl stop llama-swap
+ status "Stopping llmsnap service..."
+ $SUDO systemctl stop llmsnap
- status "Disabling llama-swap service..."
- $SUDO systemctl disable llama-swap
+ status "Disabling llmsnap service..."
+ $SUDO systemctl disable llmsnap
}
if available systemctl; then
configure_systemd
fi
-if available llama-swap; then
- status "Removing llama-swap binary..."
- $SUDO rm $(which llama-swap)
+if available llmsnap; then
+ status "Removing llmsnap binary..."
+ $SUDO rm $(which llmsnap)
fi
-if [ -f "/usr/share/llama-swap/config.yaml" ]; then
+if [ -f "/usr/share/llmsnap/config.yaml" ]; then
while true; do
- printf "Delete config.yaml (/usr/share/llama-swap/config.yaml)? [y/N] " >&2
+ printf "Delete config.yaml (/usr/share/llmsnap/config.yaml)? [y/N] " >&2
read answer
case "$answer" in
- [Yy]* )
- $SUDO rm -r /usr/share/llama-swap
+ [Yy]* )
+ $SUDO rm -r /usr/share/llmsnap
break
;;
- [Nn]* | "" )
+ [Nn]* | "" )
break
;;
- * )
+ * )
echo "Invalid input. Please enter y or n."
;;
esac
done
fi
-if id llama-swap >/dev/null 2>&1; then
- status "Removing llama-swap user..."
- $SUDO userdel llama-swap
+if id llmsnap >/dev/null 2>&1; then
+ status "Removing llmsnap user..."
+ $SUDO userdel llmsnap
fi
-if getent group llama-swap >/dev/null 2>&1; then
- status "Removing llama-swap group..."
- $SUDO groupdel llama-swap
+if getent group llmsnap >/dev/null 2>&1; then
+ status "Removing llmsnap group..."
+ $SUDO groupdel llmsnap
fi
diff --git a/ui/index.html b/ui/index.html
index 34539145..38e60f6c 100644
--- a/ui/index.html
+++ b/ui/index.html
@@ -8,7 +8,7 @@
- llama-swap
+ llmsnap
diff --git a/ui/public/site.webmanifest b/ui/public/site.webmanifest
index 42e9963a..f632993b 100644
--- a/ui/public/site.webmanifest
+++ b/ui/public/site.webmanifest
@@ -1,6 +1,6 @@
{
- "name": "llama-swap",
- "short_name": "llama-swap",
+ "name": "llmsnap",
+ "short_name": "llmsnap",
"icons": [
{
"src": "/web-app-manifest-192x192.png",
diff --git a/ui/src/components/Header.tsx b/ui/src/components/Header.tsx
index 556db3ae..c325c072 100644
--- a/ui/src/components/Header.tsx
+++ b/ui/src/components/Header.tsx
@@ -8,7 +8,7 @@ export function Header() {
const { screenWidth, toggleTheme, isDarkMode, appTitle, setAppTitle, isNarrow } = useTheme();
const handleTitleChange = useCallback(
(newTitle: string) => {
- setAppTitle(newTitle.replace(/\n/g, "").trim().substring(0, 64) || "llama-swap");
+ setAppTitle(newTitle.replace(/\n/g, "").trim().substring(0, 64) || "llmsnap");
},
[setAppTitle]
);
diff --git a/ui/src/contexts/ThemeProvider.tsx b/ui/src/contexts/ThemeProvider.tsx
index bfbba857..7727e5ad 100644
--- a/ui/src/contexts/ThemeProvider.tsx
+++ b/ui/src/contexts/ThemeProvider.tsx
@@ -22,7 +22,7 @@ type ThemeProviderProps = {
};
export function ThemeProvider({ children }: ThemeProviderProps) {
- const [appTitle, setAppTitle] = usePersistentState("app-title", "llama-swap");
+ const [appTitle, setAppTitle] = usePersistentState("appTitle", "llmsnap");
const [connectionState, setConnectionState] = useState("disconnected");
/**