llmboost-hub 0.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- llmboost_hub/cli.py +47 -0
- llmboost_hub/commands/attach.py +74 -0
- llmboost_hub/commands/chat.py +62 -0
- llmboost_hub/commands/completions.py +238 -0
- llmboost_hub/commands/list.py +283 -0
- llmboost_hub/commands/login.py +72 -0
- llmboost_hub/commands/prep.py +559 -0
- llmboost_hub/commands/run.py +486 -0
- llmboost_hub/commands/search.py +182 -0
- llmboost_hub/commands/serve.py +303 -0
- llmboost_hub/commands/status.py +34 -0
- llmboost_hub/commands/stop.py +59 -0
- llmboost_hub/commands/test_cmd.py +45 -0
- llmboost_hub/commands/tune.py +372 -0
- llmboost_hub/utils/config.py +220 -0
- llmboost_hub/utils/container_utils.py +126 -0
- llmboost_hub/utils/fs_utils.py +42 -0
- llmboost_hub/utils/generate_sample_lookup.py +132 -0
- llmboost_hub/utils/gpu_info.py +244 -0
- llmboost_hub/utils/license_checker.py +3 -0
- llmboost_hub/utils/license_wrapper.py +91 -0
- llmboost_hub/utils/llmboost_version.py +1 -0
- llmboost_hub/utils/lookup_cache.py +123 -0
- llmboost_hub/utils/model_utils.py +76 -0
- llmboost_hub/utils/signature.py +3 -0
- llmboost_hub-0.1.1.dist-info/METADATA +203 -0
- llmboost_hub-0.1.1.dist-info/RECORD +31 -0
- llmboost_hub-0.1.1.dist-info/WHEEL +5 -0
- llmboost_hub-0.1.1.dist-info/entry_points.txt +3 -0
- llmboost_hub-0.1.1.dist-info/licenses/LICENSE +16 -0
- llmboost_hub-0.1.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import time
|
|
3
|
+
import json
|
|
4
|
+
import io
|
|
5
|
+
import pandas as pd
|
|
6
|
+
import requests
|
|
7
|
+
import click
|
|
8
|
+
|
|
9
|
+
from llmboost_hub.utils.config import config
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _cache_is_fresh(path: str, ttl_seconds: int = 60) -> bool:
|
|
13
|
+
try:
|
|
14
|
+
mtime = os.path.getmtime(path)
|
|
15
|
+
return (time.time() - mtime) < ttl_seconds
|
|
16
|
+
except Exception:
|
|
17
|
+
return False
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _write_cache_from_df(cache_path: str, df: pd.DataFrame, verbose: bool = False) -> None:
|
|
21
|
+
try:
|
|
22
|
+
if cache_path.lower().endswith(".json"):
|
|
23
|
+
df.to_json(cache_path, orient="records")
|
|
24
|
+
else:
|
|
25
|
+
df.to_csv(cache_path, index=False)
|
|
26
|
+
except Exception:
|
|
27
|
+
# best-effort cache
|
|
28
|
+
pass
|
|
29
|
+
if verbose:
|
|
30
|
+
click.echo(f"Refreshed cache at {cache_path}")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _load_df_from_cache(cache_path: str, verbose: bool = False) -> pd.DataFrame:
|
|
34
|
+
try:
|
|
35
|
+
if cache_path.lower().endswith(".json"):
|
|
36
|
+
with open(cache_path, "r", encoding="utf-8") as fh:
|
|
37
|
+
data = json.load(fh)
|
|
38
|
+
return pd.DataFrame(data)
|
|
39
|
+
else:
|
|
40
|
+
return pd.read_csv(cache_path)
|
|
41
|
+
except Exception:
|
|
42
|
+
if verbose:
|
|
43
|
+
click.echo(f"Failed to load cache from {cache_path}")
|
|
44
|
+
return pd.DataFrame()
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _fetch_csv(endpoint: str, params: dict, verbose: bool = False) -> pd.DataFrame:
|
|
48
|
+
# if verbose:
|
|
49
|
+
# click.echo(f"Downloading CSV from {endpoint} with params {params}")
|
|
50
|
+
resp = requests.get(endpoint, params=params, timeout=10)
|
|
51
|
+
if resp.status_code != 200:
|
|
52
|
+
raise click.ClickException(f"Lookup failed ({resp.status_code}): {resp.text}")
|
|
53
|
+
try:
|
|
54
|
+
return pd.read_csv(io.StringIO(resp.text))
|
|
55
|
+
except Exception:
|
|
56
|
+
raise click.ClickException("Lookup returned invalid CSV")
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def load_lookup_df(
|
|
60
|
+
endpoint: str,
|
|
61
|
+
query: str,
|
|
62
|
+
verbose: bool = False,
|
|
63
|
+
local_only: bool = False,
|
|
64
|
+
skip_cache_update: bool = False,
|
|
65
|
+
) -> pd.DataFrame:
|
|
66
|
+
"""
|
|
67
|
+
Use the local cache (`config.LBH_LOOKUP_CACHE`) if fresh (age < `config.LBH_LOOKUP_CACHE_TTL`);
|
|
68
|
+
otherwise fetch from `endpoint`.
|
|
69
|
+
|
|
70
|
+
On fetch success:
|
|
71
|
+
- Return DataFrame.
|
|
72
|
+
|
|
73
|
+
On fetch failure:
|
|
74
|
+
- Fall back to the cache (even if stale)
|
|
75
|
+
|
|
76
|
+
On cache failure:
|
|
77
|
+
- Return empty DataFrame.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
endpoint: CSV endpoint URL.
|
|
81
|
+
query: Optional query string to pass to the endpoint (e.g., `q`).
|
|
82
|
+
verbose: If True, log cache and fetch behavior.
|
|
83
|
+
local_only: If True, skip remote fetch and use only local cache.
|
|
84
|
+
skip_cache_update: If True, do not update cache after successful fetch. (Only applies if `local_only=False`.)
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
A pandas DataFrame with columns normalized to lower-case (may be empty).
|
|
88
|
+
"""
|
|
89
|
+
cache_path = config.LBH_LOOKUP_CACHE
|
|
90
|
+
|
|
91
|
+
# Fresh cache
|
|
92
|
+
if os.path.exists(cache_path) and _cache_is_fresh(
|
|
93
|
+
cache_path, ttl_seconds=config.LBH_LOOKUP_CACHE_TTL
|
|
94
|
+
):
|
|
95
|
+
if verbose:
|
|
96
|
+
click.echo(f"Using fresh cache at {cache_path}")
|
|
97
|
+
return _load_df_from_cache(cache_path, verbose=verbose)
|
|
98
|
+
|
|
99
|
+
# Skip fetch remote if local_only
|
|
100
|
+
if not local_only:
|
|
101
|
+
try:
|
|
102
|
+
df = _fetch_csv(endpoint, params={"q": query}, verbose=verbose)
|
|
103
|
+
df.columns = [str(c).strip().lower() for c in df.columns]
|
|
104
|
+
if not skip_cache_update:
|
|
105
|
+
_write_cache_from_df(cache_path, df, verbose=verbose)
|
|
106
|
+
return df
|
|
107
|
+
except click.ClickException as e:
|
|
108
|
+
if verbose:
|
|
109
|
+
click.echo(f"Remote lookup failed: {e}. Falling back to cache/sample.")
|
|
110
|
+
except Exception as e:
|
|
111
|
+
if verbose:
|
|
112
|
+
click.echo(f"Remote error: {e}. Falling back to cache/sample.")
|
|
113
|
+
|
|
114
|
+
# Fallback to cache (even if stale)
|
|
115
|
+
if os.path.exists(cache_path):
|
|
116
|
+
if verbose:
|
|
117
|
+
click.echo(f"Using cached data from {cache_path}")
|
|
118
|
+
return _load_df_from_cache(cache_path, verbose=verbose)
|
|
119
|
+
|
|
120
|
+
# Last resort: generate empty DataFrame
|
|
121
|
+
if verbose:
|
|
122
|
+
click.echo(f"No cache found at {cache_path}.")
|
|
123
|
+
return pd.DataFrame()
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from typing import List
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def path_has_files(path: str) -> bool:
|
|
6
|
+
"""
|
|
7
|
+
Return True if 'path' exists, is a directory, and contains at least one file
|
|
8
|
+
in its subtree (current dir or any nested subdirectory).
|
|
9
|
+
|
|
10
|
+
Args:
|
|
11
|
+
path: Absolute or relative directory path.
|
|
12
|
+
|
|
13
|
+
Returns:
|
|
14
|
+
True if there is at least one regular file somewhere under 'path'; False otherwise.
|
|
15
|
+
"""
|
|
16
|
+
# Fast-fail if not a directory
|
|
17
|
+
if not os.path.isdir(path):
|
|
18
|
+
return False
|
|
19
|
+
# Walk the tree and short-circuit as soon as we see any file
|
|
20
|
+
for _, _, files in os.walk(path):
|
|
21
|
+
if files:
|
|
22
|
+
return True
|
|
23
|
+
return False
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def is_model_downloaded(models_root: str, model_id: str) -> bool:
|
|
27
|
+
"""
|
|
28
|
+
Check if the models root contains a downloaded model directory for `model_id`.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
models_root: Root directory that stores models (e.g., `config.LBH_MODELS`).
|
|
32
|
+
model_id: Model identifier; may include `org/name` or plain name.
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
True if `models_root/model_id` exists and contains at least one file; False otherwise.
|
|
36
|
+
"""
|
|
37
|
+
return path_has_files(os.path.join(models_root, str(model_id or "")))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def get_model_name_from_model_id(model_id: str) -> str:
|
|
41
|
+
"""
|
|
42
|
+
Get name of model from a Hugging Face style model id.
|
|
43
|
+
Applies following transformations:
|
|
44
|
+
- Remove repo/organization prefix (if present; splits on '/')
|
|
45
|
+
Converts any 'org/name' to just 'name'.
|
|
46
|
+
|
|
47
|
+
Examples:
|
|
48
|
+
'Org/Model_Name' -> 'Model_name'
|
|
49
|
+
'model.name' -> 'model.name'
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
model_id: Model id such as 'org/name' or 'name'.
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
Normalized model name.
|
|
56
|
+
"""
|
|
57
|
+
parts = str(model_id or "").split("/")
|
|
58
|
+
return parts[-1] # get last part after '/'
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def get_repo_from_model_id(model_id: str) -> str:
|
|
62
|
+
"""
|
|
63
|
+
Extract the organization/user (repo owner) from a Hugging Face style model id.
|
|
64
|
+
|
|
65
|
+
Examples:
|
|
66
|
+
'org/name' -> 'org'
|
|
67
|
+
'name' -> '' (no org present)
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
model_id: Model id such as 'org/name' or 'name'.
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
The repo/organization segment if present; otherwise an empty string.
|
|
74
|
+
"""
|
|
75
|
+
parts = str(model_id or "").split("/")
|
|
76
|
+
return parts[-2] if len(parts) >= 2 else ""
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: llmboost_hub
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: A lightweight CLI tool for managing LLMBoost model images and environments.
|
|
5
|
+
Author-email: Harish Kambhampaty <harish.kambhampaty@mangoboost.io>
|
|
6
|
+
License: Copyright 2025, MangoBoost, Inc. All rights reserved.
|
|
7
|
+
|
|
8
|
+
Redistribution and modification in source and binary forms is
|
|
9
|
+
strictly prohibited.
|
|
10
|
+
|
|
11
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
|
|
12
|
+
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
13
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
14
|
+
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
15
|
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
16
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
17
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
18
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
19
|
+
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
20
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
21
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
22
|
+
|
|
23
|
+
Project-URL: Homepage, https://github.com/mangoboost/llmboost_hub
|
|
24
|
+
Project-URL: Documentation, https://docs.mangoboost.io/llmboost_hub
|
|
25
|
+
Project-URL: Source, https://github.com/mangoboost/llmboost_hub
|
|
26
|
+
Keywords: LLM,Docker,CLI,HPC,AI,LLMBoost
|
|
27
|
+
Classifier: Programming Language :: Python :: 3
|
|
28
|
+
Classifier: Operating System :: OS Independent
|
|
29
|
+
Classifier: Intended Audience :: Developers
|
|
30
|
+
Requires-Python: >=3.8
|
|
31
|
+
Description-Content-Type: text/markdown
|
|
32
|
+
License-File: LICENSE
|
|
33
|
+
Requires-Dist: click>=8.0
|
|
34
|
+
Requires-Dist: requests>=2.31
|
|
35
|
+
Requires-Dist: tabulate>=0.9
|
|
36
|
+
Requires-Dist: rich>=13.7
|
|
37
|
+
Requires-Dist: docker>=7.0
|
|
38
|
+
Requires-Dist: pyyaml>=6.0
|
|
39
|
+
Requires-Dist: pandas>=2.0
|
|
40
|
+
Requires-Dist: licensing
|
|
41
|
+
Requires-Dist: bcrypt>=4.0
|
|
42
|
+
Requires-Dist: huggingface_hub>=0.23
|
|
43
|
+
Requires-Dist: black>=23.1.0
|
|
44
|
+
Provides-Extra: build
|
|
45
|
+
Requires-Dist: build>=1.0.0; extra == "build"
|
|
46
|
+
Requires-Dist: wheel>=0.42; extra == "build"
|
|
47
|
+
Requires-Dist: setuptools>=68.0; extra == "build"
|
|
48
|
+
Requires-Dist: twine>=4.0; extra == "build"
|
|
49
|
+
Provides-Extra: compile
|
|
50
|
+
Requires-Dist: nuitka>=2.1; extra == "compile"
|
|
51
|
+
Provides-Extra: obfuscate
|
|
52
|
+
Requires-Dist: pyarmor>=8.5; extra == "obfuscate"
|
|
53
|
+
Dynamic: license-file
|
|
54
|
+
|
|
55
|
+
# [LLMBoost Hub (lbh)](https://docs.mangoboost.io/llmboost_hub/)
|
|
56
|
+
|
|
57
|
+
Manage LLMBoost™ model containers and environments to run, serve, and tune large language models.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Pre-requisites
|
|
62
|
+
|
|
63
|
+
### Dependencies:
|
|
64
|
+
- Python 3.10+
|
|
65
|
+
- Docker 27.3.1+
|
|
66
|
+
- NVIDIA GPU: [nvidia-docker2](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html) or AMD GPU: [ROCm 6.3+](https://rocm.docs.amd.com/en/latest/Installation_Guide/Installation-Guide.html)
|
|
67
|
+
|
|
68
|
+
### Install LLMBoost Hub:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
pip install llmboost_hub
|
|
72
|
+
|
|
73
|
+
# Verify installation
|
|
74
|
+
lbh --version
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Note: This document uses `lbh` interchangeably with `llmboost_hub`.
|
|
78
|
+
|
|
79
|
+
### Login to Hugging Face and Docker:
|
|
80
|
+
```bash
|
|
81
|
+
huggingface-cli login # or set HF_TOKEN env var
|
|
82
|
+
docker login -u <your_docker_username>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Quick start
|
|
88
|
+
|
|
89
|
+
One-liner to start serving a model (automatically downloads image and model, if needed):
|
|
90
|
+
```bash
|
|
91
|
+
lbh serve <Repo/Model-Name> # Full model name (including repository or organization name) must match the name from https://huggingface.co
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
For example:
|
|
95
|
+
```bash
|
|
96
|
+
lbh serve meta-llama/Llama-3.1-8B-Instruct
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Basic workflow:
|
|
100
|
+
```bash
|
|
101
|
+
lbh login # authenticate LLMBoost license
|
|
102
|
+
lbh search <model> # find supported models, regex-style match
|
|
103
|
+
lbh prep <Repo/Model-Name> # download image and model assets
|
|
104
|
+
lbh run <Repo/Model-Name> # start container
|
|
105
|
+
lbh serve <Repo/Model-Name> # start LLMBoost server inside container
|
|
106
|
+
lbh test <Repo/Model-Name> # send test request
|
|
107
|
+
lbh stop <Repo/Model-Name> # stop container
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
For more details, see the [Command Reference](#command-reference) section below.
|
|
111
|
+
|
|
112
|
+
Shell completions:
|
|
113
|
+
```bash
|
|
114
|
+
eval "$(lbh completions)" # current shell
|
|
115
|
+
lbh completions [--venv|--profile] # persist for venv or profile
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Configuration
|
|
121
|
+
|
|
122
|
+
*llmboost_hub* uses the following environment variables:
|
|
123
|
+
|
|
124
|
+
- `LBH_HOME`: base directory for all *llmboost_hub* data. (defaults: (host) `~/.llmboost_hub` <- (container) `/llmboost_hub`)
|
|
125
|
+
- `LBH_MODELS`: directory for storing and retrieving model assets. (default: `$LBH_HOME/models`)
|
|
126
|
+
- `LBH_WORKSPACE`: mounted user workspace for manually transferring files out of containers. (defaults: (host) `$LBH_HOME/workspace` <- (container) `/user_workspace`)
|
|
127
|
+
|
|
128
|
+
Notes:
|
|
129
|
+
- A configuation file is stored at `$LBH_HOME/config.yaml` with all the above mentioned settings (and other advanced settings).
|
|
130
|
+
- Precedence order for settings: Environment variables > Configuration file > Defaults
|
|
131
|
+
- `LBH_HOME` can only be changed by setting the env var (or in `~/.bashrc`).
|
|
132
|
+
- WARNING: Changing `LBH_HOME` will cause a new data directory to be used, and all configuration will be reset.
|
|
133
|
+
- `HF_TOKEN` is injected automatically when set.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Command Reference
|
|
138
|
+
|
|
139
|
+
Use `lbh -h` for a summary of all commands, and `lbh [COMMAND] -h` for help with a specific command and all available options.
|
|
140
|
+
|
|
141
|
+
Use `lbh -v [COMMAND]` for verbose output with any command; shows useful diagnostic info for troubleshooting.
|
|
142
|
+
|
|
143
|
+
- `lbh login`
|
|
144
|
+
- Reads `$LBH_LICENSE_PATH` or prompts for a token.
|
|
145
|
+
- Validates online and saves the license file.
|
|
146
|
+
|
|
147
|
+
- `lbh search <model>`
|
|
148
|
+
- Fetches latest models supported by LLMBoost.
|
|
149
|
+
- Filters to available GPU.
|
|
150
|
+
|
|
151
|
+
- `lbh list [model]`
|
|
152
|
+
- Lists local images joined with lookup.
|
|
153
|
+
- Shows status:
|
|
154
|
+
- pending: model not prepared; docker image or model assets missing
|
|
155
|
+
- stopped: model prepared but container not running
|
|
156
|
+
- running: container running but idling
|
|
157
|
+
- initializing: container running and starting LLMBoost server
|
|
158
|
+
- serving: LLMBoost server ready to accept requests
|
|
159
|
+
- tuning: autotuner running
|
|
160
|
+
|
|
161
|
+
- `lbh prep <Repo/Model-Name> [--only-verify] [--fresh]`
|
|
162
|
+
- Pulls the image and downloads HF assets.
|
|
163
|
+
- `--only-verify` checks digests and sizes.
|
|
164
|
+
- `--fresh` removes existing image and re-downloads model assets from Hugging Face.
|
|
165
|
+
|
|
166
|
+
- `lbh run <Repo/Model-Name> [OPTIONS] -- [DOCKER FLAGS...]`
|
|
167
|
+
- Resolves and starts the container detached.
|
|
168
|
+
- Mounts `$LBH_HOME` and `$LBH_WORKSPACE`. Injects HF_TOKEN.
|
|
169
|
+
- NVIDIA GPUs use `--gpus all`. AMD maps `/dev/dri` and `/dev/kfd`.
|
|
170
|
+
- Useful options:
|
|
171
|
+
- `--image <image>`: override docker image.
|
|
172
|
+
- `--model_path <model_path>`: override model assets path.
|
|
173
|
+
- `--restart`: restarts container, if already running.
|
|
174
|
+
- Pass extra docker flags after `--`.
|
|
175
|
+
|
|
176
|
+
- `lbh serve <Repo/Model-Name> [--host 0.0.0.0] [--port 8080] [--detached] [--force]`
|
|
177
|
+
- Starts LLMBoost server inside the container.
|
|
178
|
+
- Waits until ready, unless `--detached`.
|
|
179
|
+
- `--force` skips GPU utilization checks (use if GPU utilization is incorrectly reported by NVidia or AMD GPU drivers).
|
|
180
|
+
|
|
181
|
+
- `lbh test <Repo/Model-Name> [--query "..."] [-t N] [--host 127.0.0.1] [--port 8080]`
|
|
182
|
+
- Sends a test request to `/v1/chat/completions`.
|
|
183
|
+
|
|
184
|
+
- `lbh attach <Repo/Model-Name> [-c <container name or ID>]`
|
|
185
|
+
- Opens a shell in the running container.
|
|
186
|
+
|
|
187
|
+
- `lbh stop <Repo/Model-Name> [-c <container name or ID>]`
|
|
188
|
+
- Stops the container.
|
|
189
|
+
|
|
190
|
+
- `lbh status [model]`
|
|
191
|
+
- Shows status and model.
|
|
192
|
+
|
|
193
|
+
- `lbh tune <Repo/Model-Name> [--metrics throughput] [--detached] [--image <image>]`
|
|
194
|
+
- Runs the autotuner.
|
|
195
|
+
- Store results to `$LBH_HOME/inference.db`, and loads this on next `lbh serve`.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Support
|
|
200
|
+
|
|
201
|
+
- Docs: https://docs.mangoboost.io/llmboost_hub/
|
|
202
|
+
- Website: https://docs.mangoboost.io/llmboost_hub/
|
|
203
|
+
- Email: support@mangoboost.io
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
llmboost_hub/cli.py,sha256=dmaQcfbDGpmzfdfS0w7nV92aObUPFBlWf7vf-WLMgz8,1293
|
|
2
|
+
llmboost_hub/commands/attach.py,sha256=9thBR2RJuMbDRoxjCo4KodAsFWqjd6NhBiSrWOvUho4,2619
|
|
3
|
+
llmboost_hub/commands/chat.py,sha256=A0fnInJB5qHqRRBNW0nOsK75zcZCvnzNrscOw8fKSas,2225
|
|
4
|
+
llmboost_hub/commands/completions.py,sha256=y__rLnB-bLQqqZVnXyjwU9CqNv-fcoOjwqTEApRtAUo,8066
|
|
5
|
+
llmboost_hub/commands/list.py,sha256=bCABrBQvIn_V4W6Y45BEmI87Z5Zf1onXOFzIOgyc8W8,10146
|
|
6
|
+
llmboost_hub/commands/login.py,sha256=gqQONUUk9VbErK1TBHbVrSmq__7tk-wtQUksJxQJCrg,2612
|
|
7
|
+
llmboost_hub/commands/prep.py,sha256=31YskfZfzNP2PqeP-3k7sOZYvAq6AhviGV3bBGAfj2s,22164
|
|
8
|
+
llmboost_hub/commands/run.py,sha256=T8CUXGoAJjJRE4rB9RHFOiRMYTuv9XjoZnsI5yuXqUY,17103
|
|
9
|
+
llmboost_hub/commands/search.py,sha256=9YVWjuww2nNndSoBeIpIyW9iwSFZJXt48xATt92DjT0,6035
|
|
10
|
+
llmboost_hub/commands/serve.py,sha256=tcVJE8hZJnV5GCb4vi58KpRs-Kc9Yrz7ICZvWjpsqS8,9618
|
|
11
|
+
llmboost_hub/commands/status.py,sha256=JXAHkRWzn6WKIC4I_KEGjT9WSQuPUJ4e1PwH9ZiiA6E,1193
|
|
12
|
+
llmboost_hub/commands/stop.py,sha256=HFIA8jc06Y4kquNHP8zuNAX1ll8ZraHJ77GlWt3BHW0,1973
|
|
13
|
+
llmboost_hub/commands/test_cmd.py,sha256=Vc5WjpapFYzJtOqBbEd-56E2_OvfJOCrwymzM7P8rs4,1707
|
|
14
|
+
llmboost_hub/commands/tune.py,sha256=kJNICp4ezOBMrShNtOFCOIZj4pnwv9JE0nHa7ZT9IIE,12107
|
|
15
|
+
llmboost_hub/utils/config.py,sha256=KPR5pOWlzDbXqFdb_afSres39IMZCOrCW3Xm-qzaQf8,7602
|
|
16
|
+
llmboost_hub/utils/container_utils.py,sha256=zZEHBqj9bQ628CLhTGeaUggCsNEXwQbOdU81GTseDTo,4313
|
|
17
|
+
llmboost_hub/utils/fs_utils.py,sha256=vcRnvh4pNB2TsU2D5962lB9UEqD0xkPR5w0lpYD6xwI,1016
|
|
18
|
+
llmboost_hub/utils/generate_sample_lookup.py,sha256=-osdHYe_SbvOIsFMRi5hFU00qpllBuqItthLd09hVxs,4108
|
|
19
|
+
llmboost_hub/utils/gpu_info.py,sha256=bqFSDYyGbobG-wYIlBJYzSnf4HoSbp0JYiAzKwqfTg8,7635
|
|
20
|
+
llmboost_hub/utils/license_checker.py,sha256=hJXvetEeMAzN4xACsUSLNPM7VYVhGtn_HvUENO34d4o,13300
|
|
21
|
+
llmboost_hub/utils/license_wrapper.py,sha256=AhJHZmdkVUGUlohTfwBkYF8zsp6pXx7Owo9EL8Qgw-w,3024
|
|
22
|
+
llmboost_hub/utils/llmboost_version.py,sha256=J-j-u0itpEFT6irdmWmixQqYMadNl1X91TxUmoiLHMI,22
|
|
23
|
+
llmboost_hub/utils/lookup_cache.py,sha256=IZ5S-FMn4WfGlW7dpmL14w8sdfJD8wtn51iGnQCntpY,4029
|
|
24
|
+
llmboost_hub/utils/model_utils.py,sha256=818M0d1Y8pQ0gL15bvc1SzAouQhf7jl6zSAu07MgBSM,2243
|
|
25
|
+
llmboost_hub/utils/signature.py,sha256=TlukT_dJ9xXNvV6LUggABMC5-yajPAT7OqmFP9Vg_z0,83
|
|
26
|
+
llmboost_hub-0.1.1.dist-info/licenses/LICENSE,sha256=Bs8AHb5xcW2e0Wh2rAnxkHkVtG6nO1GKuP01mvhNSiw,881
|
|
27
|
+
llmboost_hub-0.1.1.dist-info/METADATA,sha256=rMiyXf7VqXbBmKrVJi0-ccVE-XcmAHcgkksBXNYyeHY,7702
|
|
28
|
+
llmboost_hub-0.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
29
|
+
llmboost_hub-0.1.1.dist-info/entry_points.txt,sha256=zOGSTbgg7ct5h-x-MkhAFfCP-ljKLgXoucw5B1GmuUo,83
|
|
30
|
+
llmboost_hub-0.1.1.dist-info/top_level.txt,sha256=GiutvBTlDMdnX4lMved7C4gi60bjCzqS7vYlKzm_f0w,13
|
|
31
|
+
llmboost_hub-0.1.1.dist-info/RECORD,,
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
Copyright 2025, MangoBoost, Inc. All rights reserved.
|
|
2
|
+
|
|
3
|
+
Redistribution and modification in source and binary forms is
|
|
4
|
+
strictly prohibited.
|
|
5
|
+
|
|
6
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
|
|
7
|
+
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
8
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
9
|
+
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
10
|
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
11
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
12
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
13
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
14
|
+
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
15
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
16
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
llmboost_hub
|