lemonade-sdk 8.1.7__py3-none-any.whl → 8.1.9__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.
Potentially problematic release.
This version of lemonade-sdk might be problematic. Click here for more details.
- lemonade/cli.py +47 -5
- lemonade/profilers/agt_power.py +437 -0
- lemonade/profilers/hwinfo_power.py +429 -0
- lemonade/tools/llamacpp/utils.py +15 -4
- lemonade/tools/oga/load.py +15 -2
- lemonade/tools/report/table.py +1 -1
- lemonade/tools/server/llamacpp.py +19 -13
- lemonade/tools/server/serve.py +39 -9
- lemonade/tools/server/static/js/chat.js +545 -242
- lemonade/tools/server/static/js/models.js +112 -24
- lemonade/tools/server/static/js/shared.js +15 -5
- lemonade/tools/server/static/styles.css +145 -75
- lemonade/tools/server/static/webapp.html +23 -27
- lemonade/tools/server/wrapped_server.py +8 -0
- lemonade/version.py +1 -1
- lemonade_install/install.py +15 -49
- {lemonade_sdk-8.1.7.dist-info → lemonade_sdk-8.1.9.dist-info}/METADATA +16 -64
- {lemonade_sdk-8.1.7.dist-info → lemonade_sdk-8.1.9.dist-info}/RECORD +26 -27
- lemonade_server/cli.py +12 -9
- lemonade_server/model_manager.py +48 -0
- lemonade_server/server_models.json +24 -6
- lemonade/tools/quark/__init__.py +0 -0
- lemonade/tools/quark/quark_load.py +0 -173
- lemonade/tools/quark/quark_quantize.py +0 -439
- {lemonade_sdk-8.1.7.dist-info → lemonade_sdk-8.1.9.dist-info}/WHEEL +0 -0
- {lemonade_sdk-8.1.7.dist-info → lemonade_sdk-8.1.9.dist-info}/entry_points.txt +0 -0
- {lemonade_sdk-8.1.7.dist-info → lemonade_sdk-8.1.9.dist-info}/licenses/LICENSE +0 -0
- {lemonade_sdk-8.1.7.dist-info → lemonade_sdk-8.1.9.dist-info}/licenses/NOTICE.md +0 -0
- {lemonade_sdk-8.1.7.dist-info → lemonade_sdk-8.1.9.dist-info}/top_level.txt +0 -0
|
@@ -32,27 +32,25 @@
|
|
|
32
32
|
<div class="tab-container">
|
|
33
33
|
<div class="tabs">
|
|
34
34
|
<div class="tab-group">
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
<div class="chat-
|
|
51
|
-
|
|
52
|
-
<option value="">Pick a model</option>
|
|
53
|
-
</select>
|
|
35
|
+
<button class="tab active" id="tab-chat" onclick="showTab('chat')">LLM Chat</button>
|
|
36
|
+
<button class="tab" id="tab-model-settings" onclick="showTab('settings')">Model Settings</button>
|
|
37
|
+
<button class="tab" id="tab-models" onclick="showTab('models')">Model Management</button>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<div class="model-status-indicator" id="model-status-indicator">
|
|
41
|
+
<div class="status-light" id="status-light"></div>
|
|
42
|
+
<select id="model-select" class="model-select">
|
|
43
|
+
<option value="">Pick a model</option>
|
|
44
|
+
</select>
|
|
45
|
+
<button class="model-action-btn" id="model-unload-btn" title="Unload model" style="display: flex;">⏏</button>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
<div class="tab-content active" id="content-chat">
|
|
49
|
+
<div class="chat-container">
|
|
50
|
+
<div class="chat-history" id="chat-history"></div>
|
|
51
|
+
<div class="chat-input-row">
|
|
54
52
|
<div class="input-with-indicator">
|
|
55
|
-
<
|
|
53
|
+
<textarea id="chat-input" placeholder="Type your message..." rows="1"></textarea>
|
|
56
54
|
</div>
|
|
57
55
|
<input type="file" id="file-attachment" style="display: none;" multiple accept="image/*">
|
|
58
56
|
<button id="attachment-btn" title="Attach files">📎</button>
|
|
@@ -92,9 +90,9 @@
|
|
|
92
90
|
<img src="https://raw.githubusercontent.com/lemonade-sdk/assets/refs/heads/main/partner_logos/lm_eval.png" alt="LM-Eval" class="app-logo-img">
|
|
93
91
|
<span class="app-name">LM-Eval</span>
|
|
94
92
|
</a>
|
|
95
|
-
<a href="https://lemonade-
|
|
96
|
-
<img src="https://raw.githubusercontent.com/lemonade-sdk/
|
|
97
|
-
<span class="app-name">
|
|
93
|
+
<a href="https://github.com/lemonade-sdk/lemonade-arcade" target="_blank" class="app-logo-item" title="Lemonade Arcade">
|
|
94
|
+
<img src="https://raw.githubusercontent.com/lemonade-sdk/lemonade-arcade/refs/heads/main/docs/assets/favicon.ico" alt="Lemonade Arcade" class="app-logo-img">
|
|
95
|
+
<span class="app-name">Lemonade Arcade</span>
|
|
98
96
|
</a>
|
|
99
97
|
<a href="https://github.com/lemonade-sdk/lemonade/blob/main/docs/server/apps/ai-toolkit.md" target="_blank" class="app-logo-item" title="AI Toolkit">
|
|
100
98
|
<img src="https://raw.githubusercontent.com/lemonade-sdk/assets/refs/heads/main/partner_logos/ai_toolkit.png" alt="AI Toolkit" class="app-logo-img">
|
|
@@ -142,7 +140,6 @@
|
|
|
142
140
|
</div>
|
|
143
141
|
<div class="category-content expanded" id="category-hot"></div>
|
|
144
142
|
</div>
|
|
145
|
-
|
|
146
143
|
<div class="model-category-section">
|
|
147
144
|
<div class="section-header">
|
|
148
145
|
<span class="section-icon">🔧</span>
|
|
@@ -155,7 +152,6 @@
|
|
|
155
152
|
<div class="subcategory" data-recipe="oga-cpu" onclick="selectRecipe('oga-cpu')">OGA CPU</div>
|
|
156
153
|
</div>
|
|
157
154
|
</div>
|
|
158
|
-
|
|
159
155
|
<div class="model-category-section">
|
|
160
156
|
<div class="section-header">
|
|
161
157
|
<span class="section-icon">🏷️</span>
|
|
@@ -165,12 +161,12 @@
|
|
|
165
161
|
<div class="subcategory" data-label="coding" onclick="selectLabel('coding')">Coding</div>
|
|
166
162
|
<div class="subcategory" data-label="vision" onclick="selectLabel('vision')">Vision</div>
|
|
167
163
|
<div class="subcategory" data-label="reasoning" onclick="selectLabel('reasoning')">Reasoning</div>
|
|
164
|
+
<div class="subcategory" data-label="tool-calling" onclick="selectLabel('tool-calling')">Tool Calling</div>
|
|
168
165
|
<div class="subcategory" data-label="reranking" onclick="selectLabel('reranking')">Reranking</div>
|
|
169
166
|
<div class="subcategory" data-label="embeddings" onclick="selectLabel('embeddings')">Embeddings</div>
|
|
170
167
|
<div class="subcategory" data-label="custom" onclick="selectLabel('custom')">Custom</div>
|
|
171
168
|
</div>
|
|
172
169
|
</div>
|
|
173
|
-
|
|
174
170
|
<div class="model-category" data-category="add">
|
|
175
171
|
<div class="category-header" onclick="showAddModelForm()">
|
|
176
172
|
<span class="category-icon">➕</span>
|
|
@@ -178,7 +174,6 @@
|
|
|
178
174
|
</div>
|
|
179
175
|
</div>
|
|
180
176
|
</div>
|
|
181
|
-
|
|
182
177
|
<div class="model-browser-main">
|
|
183
178
|
<div class="model-list" id="model-list"></div>
|
|
184
179
|
|
|
@@ -255,3 +250,4 @@
|
|
|
255
250
|
<script src="/static/js/chat.js"></script>
|
|
256
251
|
</body>
|
|
257
252
|
</html>
|
|
253
|
+
</html>
|
|
@@ -81,6 +81,7 @@ class WrappedServer(ABC):
|
|
|
81
81
|
self.process: subprocess.Popen = None
|
|
82
82
|
self.server_name: str = server_name
|
|
83
83
|
self.telemetry: WrappedServerTelemetry = telemetry
|
|
84
|
+
self.log_thread_exception = None
|
|
84
85
|
|
|
85
86
|
def choose_port(self):
|
|
86
87
|
"""
|
|
@@ -192,6 +193,8 @@ class WrappedServer(ABC):
|
|
|
192
193
|
|
|
193
194
|
if self.process.poll() is not None:
|
|
194
195
|
break
|
|
196
|
+
except HTTPException as e:
|
|
197
|
+
self.log_thread_exception = e
|
|
195
198
|
except UnicodeDecodeError as e:
|
|
196
199
|
logging.debug(
|
|
197
200
|
"Unicode decode error reading subprocess output: %s", str(e)
|
|
@@ -217,6 +220,11 @@ class WrappedServer(ABC):
|
|
|
217
220
|
)
|
|
218
221
|
time.sleep(1)
|
|
219
222
|
|
|
223
|
+
if self.log_thread_exception:
|
|
224
|
+
e = self.log_thread_exception
|
|
225
|
+
self.log_thread_exception = None
|
|
226
|
+
raise e
|
|
227
|
+
|
|
220
228
|
@abstractmethod
|
|
221
229
|
def _launch_server_subprocess(
|
|
222
230
|
self,
|
lemonade/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "8.1.
|
|
1
|
+
__version__ = "8.1.9"
|
lemonade_install/install.py
CHANGED
|
@@ -48,10 +48,6 @@ NPU_DRIVER_DOWNLOAD_URL = (
|
|
|
48
48
|
REQUIRED_NPU_DRIVER_VERSION = "32.0.203.280"
|
|
49
49
|
|
|
50
50
|
lemonade_install_dir = Path(__file__).parent.parent.parent
|
|
51
|
-
DEFAULT_QUARK_VERSION = "quark-0.6.0"
|
|
52
|
-
DEFAULT_QUARK_DIR = os.path.join(
|
|
53
|
-
lemonade_install_dir, "install", "quark", DEFAULT_QUARK_VERSION
|
|
54
|
-
)
|
|
55
51
|
|
|
56
52
|
# List of supported Ryzen AI processor series (can be extended in the future)
|
|
57
53
|
SUPPORTED_RYZEN_AI_SERIES = ["300"]
|
|
@@ -177,7 +173,7 @@ def _get_ryzenai_version_info(device=None):
|
|
|
177
173
|
f"{e}\n Please install lemonade-sdk with "
|
|
178
174
|
"one of the oga extras, for example:\n"
|
|
179
175
|
"pip install lemonade-sdk[dev,oga-cpu]\n"
|
|
180
|
-
"See https://
|
|
176
|
+
"See https://lemonade-server.ai/install_options.html for details"
|
|
181
177
|
) from e
|
|
182
178
|
|
|
183
179
|
|
|
@@ -445,18 +441,18 @@ class Install:
|
|
|
445
441
|
"variable (e.g., Ryzen AI uses environment variable OGA_TOKEN).",
|
|
446
442
|
)
|
|
447
443
|
|
|
448
|
-
parser.add_argument(
|
|
449
|
-
"--quark",
|
|
450
|
-
help="Install Quark Quantization tool for LLMs",
|
|
451
|
-
choices=["0.6.0"],
|
|
452
|
-
)
|
|
453
|
-
|
|
454
444
|
parser.add_argument(
|
|
455
445
|
"--llamacpp",
|
|
456
446
|
help="Install llama.cpp binaries with specified backend",
|
|
457
447
|
choices=["rocm", "vulkan"],
|
|
458
448
|
)
|
|
459
449
|
|
|
450
|
+
parser.add_argument(
|
|
451
|
+
"--override",
|
|
452
|
+
action="store_true",
|
|
453
|
+
help="Override the deprecation error to use legacy tools.",
|
|
454
|
+
)
|
|
455
|
+
|
|
460
456
|
return parser
|
|
461
457
|
|
|
462
458
|
@staticmethod
|
|
@@ -637,7 +633,7 @@ class Install:
|
|
|
637
633
|
return file
|
|
638
634
|
|
|
639
635
|
@staticmethod
|
|
640
|
-
def _install_ryzenai(ryzenai, build_model, yes, token):
|
|
636
|
+
def _install_ryzenai(ryzenai, build_model, yes, token, override=False):
|
|
641
637
|
# Check if the processor is supported before proceeding
|
|
642
638
|
check_ryzen_ai_processor()
|
|
643
639
|
|
|
@@ -654,6 +650,9 @@ class Install:
|
|
|
654
650
|
+ "=" * 80
|
|
655
651
|
+ "\n"
|
|
656
652
|
)
|
|
653
|
+
if not override:
|
|
654
|
+
raise ValueError(warning_msg)
|
|
655
|
+
|
|
657
656
|
print(warning_msg)
|
|
658
657
|
|
|
659
658
|
# Delete any previous Ryzen AI installation in this environment
|
|
@@ -715,36 +714,6 @@ class Install:
|
|
|
715
714
|
except IOError as e:
|
|
716
715
|
print(f"An error occurred while writing {version_info_path}: {e}")
|
|
717
716
|
|
|
718
|
-
@staticmethod
|
|
719
|
-
def _install_quark(quark):
|
|
720
|
-
quark_install_dir = os.path.join(lemonade_install_dir, "install", "quark")
|
|
721
|
-
os.makedirs(quark_install_dir, exist_ok=True)
|
|
722
|
-
|
|
723
|
-
# Install Quark utilities
|
|
724
|
-
quark_url = (
|
|
725
|
-
f"https://www.xilinx.com/bin/public/openDownload?filename=quark-{quark}.zip"
|
|
726
|
-
)
|
|
727
|
-
quark_path = download_and_extract_package(
|
|
728
|
-
url=quark_url,
|
|
729
|
-
version=quark,
|
|
730
|
-
install_dir=quark_install_dir,
|
|
731
|
-
package_name="quark",
|
|
732
|
-
)
|
|
733
|
-
# Install Quark wheel
|
|
734
|
-
wheel_url = (
|
|
735
|
-
"https://www.xilinx.com/bin/public/openDownload?"
|
|
736
|
-
f"filename=quark-{quark}-py3-none-any.whl"
|
|
737
|
-
)
|
|
738
|
-
wheel_path = os.path.join(quark_install_dir, f"quark-{quark}-py3-none-any.whl")
|
|
739
|
-
print(f"\nInstalling Quark wheel from {wheel_url}")
|
|
740
|
-
download_file(wheel_url, wheel_path, "wheel file")
|
|
741
|
-
|
|
742
|
-
install_cmd = f"{sys.executable} -m pip install --no-deps {wheel_path}"
|
|
743
|
-
subprocess.run(install_cmd, check=True, shell=True)
|
|
744
|
-
os.remove(wheel_path)
|
|
745
|
-
|
|
746
|
-
print(f"\nQuark installed successfully at: {quark_path}")
|
|
747
|
-
|
|
748
717
|
@staticmethod
|
|
749
718
|
def _install_llamacpp(backend):
|
|
750
719
|
"""
|
|
@@ -762,22 +731,19 @@ class Install:
|
|
|
762
731
|
self,
|
|
763
732
|
ryzenai: Optional[str] = None,
|
|
764
733
|
build_model: Optional[str] = None,
|
|
765
|
-
quark: Optional[str] = None,
|
|
766
734
|
llamacpp: Optional[str] = None,
|
|
767
735
|
yes: bool = False,
|
|
768
736
|
token: Optional[str] = None,
|
|
737
|
+
override: bool = False,
|
|
769
738
|
):
|
|
770
|
-
if ryzenai is None and
|
|
739
|
+
if ryzenai is None and llamacpp is None:
|
|
771
740
|
raise ValueError(
|
|
772
741
|
"You must select something to install, "
|
|
773
|
-
"for example `--ryzenai
|
|
742
|
+
"for example `--ryzenai` or `--llamacpp`"
|
|
774
743
|
)
|
|
775
744
|
|
|
776
745
|
if ryzenai is not None:
|
|
777
|
-
self._install_ryzenai(ryzenai, build_model, yes, token)
|
|
778
|
-
|
|
779
|
-
if quark is not None:
|
|
780
|
-
self._install_quark(quark)
|
|
746
|
+
self._install_ryzenai(ryzenai, build_model, yes, token, override)
|
|
781
747
|
|
|
782
748
|
if llamacpp is not None:
|
|
783
749
|
self._install_llamacpp(llamacpp)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lemonade-sdk
|
|
3
|
-
Version: 8.1.
|
|
3
|
+
Version: 8.1.9
|
|
4
4
|
Summary: Lemonade SDK: Your LLM Aide for Validation and Deployment
|
|
5
5
|
Author-email: lemonade@amd.com
|
|
6
6
|
Requires-Python: >=3.10, <3.14
|
|
@@ -16,7 +16,7 @@ Requires-Dist: numpy
|
|
|
16
16
|
Requires-Dist: fasteners
|
|
17
17
|
Requires-Dist: GitPython>=3.1.40
|
|
18
18
|
Requires-Dist: psutil>=6.1.1
|
|
19
|
-
Requires-Dist: wmi
|
|
19
|
+
Requires-Dist: wmi; platform_system == "Windows"
|
|
20
20
|
Requires-Dist: py-cpuinfo
|
|
21
21
|
Requires-Dist: pytz
|
|
22
22
|
Requires-Dist: zstandard
|
|
@@ -45,42 +45,6 @@ Requires-Dist: human-eval-windows==1.0.4; extra == "dev"
|
|
|
45
45
|
Requires-Dist: lm-eval[api]; extra == "dev"
|
|
46
46
|
Provides-Extra: model-generate
|
|
47
47
|
Requires-Dist: model-generate==1.5.0; (platform_system == "Windows" and python_version == "3.10") and extra == "model-generate"
|
|
48
|
-
Provides-Extra: oga-hybrid
|
|
49
|
-
Requires-Dist: lemonade-sdk[oga-ryzenai]; extra == "oga-hybrid"
|
|
50
|
-
Provides-Extra: oga-unified
|
|
51
|
-
Requires-Dist: lemonade-sdk[oga-ryzenai]; extra == "oga-unified"
|
|
52
|
-
Provides-Extra: oga-hybrid-minimal
|
|
53
|
-
Requires-Dist: lemonade-sdk[oga-ryzenai]; extra == "oga-hybrid-minimal"
|
|
54
|
-
Provides-Extra: oga-cpu-minimal
|
|
55
|
-
Requires-Dist: lemonade-sdk[oga-cpu]; extra == "oga-cpu-minimal"
|
|
56
|
-
Provides-Extra: oga-npu-minimal
|
|
57
|
-
Requires-Dist: lemonade-sdk[oga-ryzenai]; extra == "oga-npu-minimal"
|
|
58
|
-
Provides-Extra: llm
|
|
59
|
-
Requires-Dist: lemonade-sdk[dev]; extra == "llm"
|
|
60
|
-
Provides-Extra: llm-oga-cpu
|
|
61
|
-
Requires-Dist: lemonade-sdk[dev,oga-cpu]; extra == "llm-oga-cpu"
|
|
62
|
-
Provides-Extra: llm-oga-npu
|
|
63
|
-
Requires-Dist: onnx==1.16.0; extra == "llm-oga-npu"
|
|
64
|
-
Requires-Dist: onnxruntime==1.18.0; extra == "llm-oga-npu"
|
|
65
|
-
Requires-Dist: numpy==1.26.4; extra == "llm-oga-npu"
|
|
66
|
-
Requires-Dist: protobuf>=6.30.1; extra == "llm-oga-npu"
|
|
67
|
-
Requires-Dist: lemonade-sdk[dev]; extra == "llm-oga-npu"
|
|
68
|
-
Provides-Extra: llm-oga-hybrid
|
|
69
|
-
Requires-Dist: onnx==1.16.1; extra == "llm-oga-hybrid"
|
|
70
|
-
Requires-Dist: numpy==1.26.4; extra == "llm-oga-hybrid"
|
|
71
|
-
Requires-Dist: protobuf>=6.30.1; extra == "llm-oga-hybrid"
|
|
72
|
-
Provides-Extra: llm-oga-unified
|
|
73
|
-
Requires-Dist: lemonade-sdk[dev,llm-oga-hybrid]; extra == "llm-oga-unified"
|
|
74
|
-
Provides-Extra: llm-oga-igpu
|
|
75
|
-
Requires-Dist: onnxruntime-genai-directml==0.6.0; extra == "llm-oga-igpu"
|
|
76
|
-
Requires-Dist: onnxruntime-directml<1.22.0,>=1.19.0; extra == "llm-oga-igpu"
|
|
77
|
-
Requires-Dist: transformers<4.45.0; extra == "llm-oga-igpu"
|
|
78
|
-
Requires-Dist: lemonade-sdk[dev]; extra == "llm-oga-igpu"
|
|
79
|
-
Provides-Extra: llm-oga-cuda
|
|
80
|
-
Requires-Dist: onnxruntime-genai-cuda==0.8.2; extra == "llm-oga-cuda"
|
|
81
|
-
Requires-Dist: onnxruntime-gpu>=1.22.0; extra == "llm-oga-cuda"
|
|
82
|
-
Requires-Dist: transformers<=4.51.3; extra == "llm-oga-cuda"
|
|
83
|
-
Requires-Dist: lemonade-sdk[dev]; extra == "llm-oga-cuda"
|
|
84
48
|
Dynamic: author-email
|
|
85
49
|
Dynamic: description
|
|
86
50
|
Dynamic: description-content-type
|
|
@@ -94,41 +58,29 @@ Dynamic: summary
|
|
|
94
58
|
|
|
95
59
|
<p align="center">
|
|
96
60
|
<a href="https://discord.gg/5xXzkMu8Zk">
|
|
97
|
-
<img src="https://img.shields.io/badge/Discord-7289DA?logo=discord&logoColor=white" alt="Discord"
|
|
98
|
-
</a>
|
|
61
|
+
<img src="https://img.shields.io/badge/Discord-7289DA?logo=discord&logoColor=white" alt="Discord" /></a>
|
|
99
62
|
<a href="https://github.com/lemonade-sdk/lemonade/tree/main/test" title="Check out our tests">
|
|
100
|
-
<img src="https://github.com/lemonade-sdk/lemonade/actions/workflows/test_lemonade.yml/badge.svg" alt="Lemonade tests"
|
|
101
|
-
</a>
|
|
63
|
+
<img src="https://github.com/lemonade-sdk/lemonade/actions/workflows/test_lemonade.yml/badge.svg" alt="Lemonade tests" /></a>
|
|
102
64
|
<a href="docs/README.md#installation" title="Check out our instructions">
|
|
103
|
-
<img src="https://img.shields.io/badge/Windows-11-0078D6?logo=windows&logoColor=white" alt="Windows 11"
|
|
104
|
-
</a>
|
|
65
|
+
<img src="https://img.shields.io/badge/Windows-11-0078D6?logo=windows&logoColor=white" alt="Windows 11" /></a>
|
|
105
66
|
<a href="https://lemonade-server.ai/#linux" title="Ubuntu 24.04 & 25.04 Supported">
|
|
106
|
-
<img src="https://img.shields.io/badge/Ubuntu-24.04%20%7C%2025.04-E95420?logo=ubuntu&logoColor=white" alt="Ubuntu 24.04 | 25.04"
|
|
107
|
-
</a>
|
|
67
|
+
<img src="https://img.shields.io/badge/Ubuntu-24.04%20%7C%2025.04-E95420?logo=ubuntu&logoColor=white" alt="Ubuntu 24.04 | 25.04" /></a>
|
|
108
68
|
<a href="docs/README.md#installation" title="Check out our instructions">
|
|
109
|
-
<img src="https://img.shields.io/badge/Python-3.10--3.13-blue?logo=python&logoColor=white" alt="Made with Python"
|
|
110
|
-
</a>
|
|
69
|
+
<img src="https://img.shields.io/badge/Python-3.10--3.13-blue?logo=python&logoColor=white" alt="Made with Python" /></a>
|
|
111
70
|
<a href="https://github.com/lemonade-sdk/lemonade/blob/main/docs/contribute.md" title="Contribution Guide">
|
|
112
|
-
<img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" alt="PRs Welcome"
|
|
113
|
-
</a>
|
|
71
|
+
<img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" alt="PRs Welcome" /></a>
|
|
114
72
|
<a href="https://github.com/lemonade-sdk/lemonade/releases/latest" title="Download the latest release">
|
|
115
|
-
<img src="https://img.shields.io/github/v/release/lemonade-sdk/lemonade?include_prereleases" alt="Latest Release"
|
|
116
|
-
</a>
|
|
73
|
+
<img src="https://img.shields.io/github/v/release/lemonade-sdk/lemonade?include_prereleases" alt="Latest Release" /></a>
|
|
117
74
|
<a href="https://tooomm.github.io/github-release-stats/?username=lemonade-sdk&repository=lemonade">
|
|
118
|
-
<img src="https://img.shields.io/github/downloads/lemonade-sdk/lemonade/total.svg" alt="GitHub downloads"
|
|
119
|
-
</a>
|
|
75
|
+
<img src="https://img.shields.io/github/downloads/lemonade-sdk/lemonade/total.svg" alt="GitHub downloads" /></a>
|
|
120
76
|
<a href="https://github.com/lemonade-sdk/lemonade/issues">
|
|
121
|
-
<img src="https://img.shields.io/github/issues/lemonade-sdk/lemonade" alt="GitHub issues"
|
|
122
|
-
</a>
|
|
77
|
+
<img src="https://img.shields.io/github/issues/lemonade-sdk/lemonade" alt="GitHub issues" /></a>
|
|
123
78
|
<a href="https://github.com/lemonade-sdk/lemonade/blob/main/LICENSE">
|
|
124
|
-
<img src="https://img.shields.io/badge/License-Apache-yellow.svg" alt="License: Apache"
|
|
125
|
-
</a>
|
|
79
|
+
<img src="https://img.shields.io/badge/License-Apache-yellow.svg" alt="License: Apache" /></a>
|
|
126
80
|
<a href="https://github.com/psf/black">
|
|
127
|
-
<img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code style: black"
|
|
128
|
-
</a>
|
|
81
|
+
<img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code style: black" /></a>
|
|
129
82
|
<a href="https://star-history.com/#lemonade-sdk/lemonade">
|
|
130
|
-
<img src="https://img.shields.io/badge/Star%20History-View-brightgreen" alt="Star History Chart"
|
|
131
|
-
</a>
|
|
83
|
+
<img src="https://img.shields.io/badge/Star%20History-View-brightgreen" alt="Star History Chart" /></a>
|
|
132
84
|
</p>
|
|
133
85
|
<p align="center">
|
|
134
86
|
<img src="https://github.com/lemonade-sdk/assets/blob/main/docs/banner.png?raw=true" alt="Lemonade Banner" />
|
|
@@ -156,7 +108,7 @@ Startups such as [Styrk AI](https://styrk.ai/styrk-ai-and-amd-guardrails-for-you
|
|
|
156
108
|
### Use it with your favorite OpenAI-compatible app!
|
|
157
109
|
|
|
158
110
|
<p align="center">
|
|
159
|
-
<a href="https://lemonade-server.ai/docs/server/apps/open-webui/" title="Open WebUI" target="_blank"><img src="https://raw.githubusercontent.com/lemonade-sdk/assets/refs/heads/main/partner_logos/openwebui.jpg" alt="Open WebUI" width="60" /></a> <a href="https://lemonade-server.ai/docs/server/apps/continue/" title="Continue" target="_blank"><img src="https://raw.githubusercontent.com/lemonade-sdk/assets/refs/heads/main/partner_logos/continue_dev.png" alt="Continue" width="60" /></a> <a href="https://github.com/amd/gaia" title="Gaia" target="_blank"><img src="https://raw.githubusercontent.com/lemonade-sdk/assets/refs/heads/main/partner_logos/gaia.ico" alt="Gaia" width="60" /></a> <a href="https://lemonade-server.ai/docs/server/apps/anythingLLM/" title="AnythingLLM" target="_blank"><img src="https://raw.githubusercontent.com/lemonade-sdk/assets/refs/heads/main/partner_logos/anything_llm.png" alt="AnythingLLM" width="60" /></a> <a href="https://lemonade-server.ai/docs/server/apps/ai-dev-gallery/" title="AI Dev Gallery" target="_blank"><img src="https://raw.githubusercontent.com/lemonade-sdk/assets/refs/heads/main/partner_logos/ai_dev_gallery.webp" alt="AI Dev Gallery" width="60" /></a> <a href="https://lemonade-server.ai/docs/server/apps/lm-eval/" title="LM-Eval" target="_blank"><img src="https://raw.githubusercontent.com/lemonade-sdk/assets/refs/heads/main/partner_logos/lm_eval.png" alt="LM-Eval" width="60" /></a> <a href="https://lemonade-
|
|
111
|
+
<a href="https://lemonade-server.ai/docs/server/apps/open-webui/" title="Open WebUI" target="_blank"><img src="https://raw.githubusercontent.com/lemonade-sdk/assets/refs/heads/main/partner_logos/openwebui.jpg" alt="Open WebUI" width="60" /></a> <a href="https://lemonade-server.ai/docs/server/apps/continue/" title="Continue" target="_blank"><img src="https://raw.githubusercontent.com/lemonade-sdk/assets/refs/heads/main/partner_logos/continue_dev.png" alt="Continue" width="60" /></a> <a href="https://github.com/amd/gaia" title="Gaia" target="_blank"><img src="https://raw.githubusercontent.com/lemonade-sdk/assets/refs/heads/main/partner_logos/gaia.ico" alt="Gaia" width="60" /></a> <a href="https://lemonade-server.ai/docs/server/apps/anythingLLM/" title="AnythingLLM" target="_blank"><img src="https://raw.githubusercontent.com/lemonade-sdk/assets/refs/heads/main/partner_logos/anything_llm.png" alt="AnythingLLM" width="60" /></a> <a href="https://lemonade-server.ai/docs/server/apps/ai-dev-gallery/" title="AI Dev Gallery" target="_blank"><img src="https://raw.githubusercontent.com/lemonade-sdk/assets/refs/heads/main/partner_logos/ai_dev_gallery.webp" alt="AI Dev Gallery" width="60" /></a> <a href="https://lemonade-server.ai/docs/server/apps/lm-eval/" title="LM-Eval" target="_blank"><img src="https://raw.githubusercontent.com/lemonade-sdk/assets/refs/heads/main/partner_logos/lm_eval.png" alt="LM-Eval" width="60" /></a> <a href="https://github.com/lemonade-sdk/lemonade-arcade" title="Lemonade Arcade" target="_blank"><img src="https://raw.githubusercontent.com/lemonade-sdk/lemonade-arcade/refs/heads/main/docs/assets/favicon.ico" alt="Lemonade Arcade" width="60" /></a> <a href="https://github.com/lemonade-sdk/lemonade/blob/main/docs/server/apps/ai-toolkit.md" title="AI Toolkit" target="_blank"><img src="https://raw.githubusercontent.com/lemonade-sdk/assets/refs/heads/main/partner_logos/ai_toolkit.png" alt="AI Toolkit" width="60" /></a>
|
|
160
112
|
</p>
|
|
161
113
|
|
|
162
114
|
> [!TIP]
|
|
@@ -227,7 +179,7 @@ Lemonade supports the following configurations, while also making it easy to swi
|
|
|
227
179
|
</tr>
|
|
228
180
|
<tr>
|
|
229
181
|
<td><b>gfx120X</b> (RDNA4)</td>
|
|
230
|
-
<td>Windows
|
|
182
|
+
<td>Windows, Ubuntu</td>
|
|
231
183
|
<td>Radeon AI PRO R9700, RX 9070 XT/GRE/9070, RX 9060 XT</td>
|
|
232
184
|
</tr>
|
|
233
185
|
<tr>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
lemonade/__init__.py,sha256=W1Qk7r0rnQqFhPNHp6BIBT_q-OH3s-8Q_POoVfAmKW0,117
|
|
2
2
|
lemonade/api.py,sha256=Oc4yBA3LZg8FrTsbuDq1p9-XE74pqNnIEUhXyKa7qg8,5786
|
|
3
3
|
lemonade/cache.py,sha256=5iZbk273TiTMqK_vdzPOPYTo6VsWW2gNByOISA9zi1w,3002
|
|
4
|
-
lemonade/cli.py,sha256=
|
|
4
|
+
lemonade/cli.py,sha256=qU5bW7RQAUKNSpvrhVyzn68NMxyi-336Ke_JU4bsv1Q,5708
|
|
5
5
|
lemonade/sequence.py,sha256=KSH7BPsiyDKsOsg_ziQKEGsDwMmuO_YbgPRBxkZd0pw,13267
|
|
6
6
|
lemonade/state.py,sha256=sdSezla7Cd7KYL90xY3p9kcNV4ndSyN6UvNLOr3vBMA,5261
|
|
7
|
-
lemonade/version.py,sha256=
|
|
7
|
+
lemonade/version.py,sha256=nNxNovCuweKgLzK71oDtPCagHKqrBZW7fNRdrO5VFWA,22
|
|
8
8
|
lemonade/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
9
|
lemonade/common/build.py,sha256=zTb0m1-kuUx6zw5QHp2SNnVuN6jOTMQ2FCdj9iH374U,6140
|
|
10
10
|
lemonade/common/cli_helpers.py,sha256=hjBfXrTtFl8gmCFlL-ksviXR0mOcdPtTWVNKoEp3PG4,4993
|
|
@@ -17,6 +17,8 @@ lemonade/common/status.py,sha256=xSOZN508cdRtrs1HVyr9zmASYg69EsZBLSs0lroLoCM,165
|
|
|
17
17
|
lemonade/common/system_info.py,sha256=pn-k3zMQCbt5cu3aHXa4cENgrubOK97gs9PYdGPsFXA,28405
|
|
18
18
|
lemonade/common/test_helpers.py,sha256=Gwk-pa_6xYAo2oro-2EJNfuouAfw8k_brCbcMC-E-r0,758
|
|
19
19
|
lemonade/profilers/__init__.py,sha256=JKVonvJ4XZ9_6sKXPWsiMLQCNyzQOxhQw5BEHR1qOfU,31
|
|
20
|
+
lemonade/profilers/agt_power.py,sha256=t_37VEg8LPapjSKSjJln-jFznZtTIf5UpzlAXcVGOrc,16771
|
|
21
|
+
lemonade/profilers/hwinfo_power.py,sha256=UQr-EHq7B4T-IvzmErCRK0-QxcFnho4ftCaWy5p8Qvo,15819
|
|
20
22
|
lemonade/profilers/memory_tracker.py,sha256=1iuKt0FmNVYLDnOc-oZM8dX9TUksvoxO0m2EoYWjhYQ,9367
|
|
21
23
|
lemonade/profilers/profiler.py,sha256=Y5FSbc386bMlTVbqCuya9pYrso5aTthxahR1V_ZKQ9E,1902
|
|
22
24
|
lemonade/tools/__init__.py,sha256=_6xRc-FHxmujoLjLjWtpYrWYEXtCSneSy-5ya01kyPk,53
|
|
@@ -34,45 +36,42 @@ lemonade/tools/huggingface/load.py,sha256=KsSGOBBD-tNEIfYC8mCWV_jpnkjHMhN3juVmC1
|
|
|
34
36
|
lemonade/tools/huggingface/utils.py,sha256=j1S-IgjDsznUIVwkHSqqChmFyqIx9f3WcEelzohWwvU,13955
|
|
35
37
|
lemonade/tools/llamacpp/bench.py,sha256=1fkE02ecg-jRk92i5dTAXz6re14WH8bd-Z9l-m3lbDA,4844
|
|
36
38
|
lemonade/tools/llamacpp/load.py,sha256=DFCvQN548Ch9H8U_rHOiYviinzw6vixb5-V7xLj7XE4,6499
|
|
37
|
-
lemonade/tools/llamacpp/utils.py,sha256=
|
|
39
|
+
lemonade/tools/llamacpp/utils.py,sha256=nl11DRJCzcDV7OcAJtA0YRVxStdBvcnLZbhDhUrN1So,33041
|
|
38
40
|
lemonade/tools/oga/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
41
|
lemonade/tools/oga/bench.py,sha256=PJXv4UchcS2YPwijNzef8DY4DSAKYxIYY1ycHuH3T34,5005
|
|
40
|
-
lemonade/tools/oga/load.py,sha256=
|
|
42
|
+
lemonade/tools/oga/load.py,sha256=x-A-nhoni-WyDpVCLcWRAMfs5ouac9MJzxT-rsnLPw8,34226
|
|
41
43
|
lemonade/tools/oga/utils.py,sha256=F8UVLKlfYcLa2SUqlehar8-jaX2Aw4u58DjHNNvLdOA,17675
|
|
42
|
-
lemonade/tools/quark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
|
-
lemonade/tools/quark/quark_load.py,sha256=FJ4LJKTToZbHHWVEOBLadae1a3jCnnY4KvXySHbkJMA,5589
|
|
44
|
-
lemonade/tools/quark/quark_quantize.py,sha256=hwoaXhpBIORvJ16MvewphPkaDEQn3BAgXq5o82Gc-_s,16599
|
|
45
44
|
lemonade/tools/report/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
45
|
lemonade/tools/report/llm_report.py,sha256=bVHhwCINA-Ok2EdSwAsLubsc83N3KWOVuwTguw7jDcE,6676
|
|
47
|
-
lemonade/tools/report/table.py,sha256=
|
|
46
|
+
lemonade/tools/report/table.py,sha256=Kv_Epd8a6KIrdzSC2EgIl6uTKw7E5eMq10Tg16O0WxM,27996
|
|
48
47
|
lemonade/tools/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
|
-
lemonade/tools/server/llamacpp.py,sha256=
|
|
50
|
-
lemonade/tools/server/serve.py,sha256=
|
|
48
|
+
lemonade/tools/server/llamacpp.py,sha256=8HdTkrU2ht8L1ldXqkfYfYhXiA8TvySuaslinAMqr-c,9002
|
|
49
|
+
lemonade/tools/server/serve.py,sha256=gwKPs-r-bfQsyCkVxzVyTp0SyNYVqqfMeeUFQ9TivwM,61638
|
|
51
50
|
lemonade/tools/server/tool_calls.py,sha256=xrAlQwKG-nv2xLlf8f9CDSaUbyMn8ZtHkds9iZLG9K8,5230
|
|
52
51
|
lemonade/tools/server/tray.py,sha256=a9z6hdqlfj91H00j6hAExRPQkzWHhE3dnqSumzEgq0U,19599
|
|
53
52
|
lemonade/tools/server/webapp.py,sha256=8Das5yXOaSBLZmSZ_eddJajQFxBhvl5D6GI_hHlGbE0,1040
|
|
54
|
-
lemonade/tools/server/wrapped_server.py,sha256
|
|
53
|
+
lemonade/tools/server/wrapped_server.py,sha256=DlzsGUwLQzjOFRfTTxfnhvmM_9lvAki96jWIAz7Czds,16713
|
|
55
54
|
lemonade/tools/server/static/favicon.ico,sha256=hMmP9qGJNeZ0mFS86JIqPbZstXMZn0Z76_HfHQpREAU,126745
|
|
56
|
-
lemonade/tools/server/static/styles.css,sha256=
|
|
57
|
-
lemonade/tools/server/static/webapp.html,sha256=
|
|
58
|
-
lemonade/tools/server/static/js/chat.js,sha256=
|
|
55
|
+
lemonade/tools/server/static/styles.css,sha256=SYEK4rC-MdpkTj31gxNl9Kb3hCNd1Fpq-EGnRMTjVe8,45362
|
|
56
|
+
lemonade/tools/server/static/webapp.html,sha256=j7A8SOwbY_GfOSkOMV3JvXhOKY1iG70JYYuA3WdoWSQ,17856
|
|
57
|
+
lemonade/tools/server/static/js/chat.js,sha256=XpQSIn1TUra26tu2CtDyOayhXAbUEqzBK0oGtkCAu-s,39162
|
|
59
58
|
lemonade/tools/server/static/js/model-settings.js,sha256=JXHeG7xVrRU181Hj7CZflERAi1Z6t-qwYFR4aH5nf5I,5820
|
|
60
|
-
lemonade/tools/server/static/js/models.js,sha256=
|
|
61
|
-
lemonade/tools/server/static/js/shared.js,sha256=
|
|
59
|
+
lemonade/tools/server/static/js/models.js,sha256=7bCJbvS8FWpj6f1ZOwM8pt6UOQueuiOGLG79qrs-C-A,35872
|
|
60
|
+
lemonade/tools/server/static/js/shared.js,sha256=mD03xqyMH1iQwH4pOq4IpDDaAX0z7YZY71gD8gufRAg,17487
|
|
62
61
|
lemonade/tools/server/utils/port.py,sha256=J7-g-Aqygb50jNoHLhhRfBZVM-uhGlcB5-oYBAehvgw,2263
|
|
63
62
|
lemonade/tools/server/utils/system_tray.py,sha256=b9lvNv9chJKQxvmH7qzAuUe6H9HsLu7pdHFqGlAJaL0,12654
|
|
64
63
|
lemonade/tools/server/utils/thread.py,sha256=Z-PDzGcpgfN2qxTmtlROWqrUN0B2fXdPrqo_J10fR_w,2772
|
|
65
64
|
lemonade_install/__init__.py,sha256=26zohKg2jgr_5y7tObduWMYQg8zCTWMZHL8lfi2zZVQ,40
|
|
66
|
-
lemonade_install/install.py,sha256=
|
|
67
|
-
lemonade_sdk-8.1.
|
|
68
|
-
lemonade_sdk-8.1.
|
|
69
|
-
lemonade_server/cli.py,sha256=
|
|
70
|
-
lemonade_server/model_manager.py,sha256=
|
|
65
|
+
lemonade_install/install.py,sha256=Dow7kt-K9WI4PH15hBwkKtOxede3dAaOmH4I1y_P5H4,27008
|
|
66
|
+
lemonade_sdk-8.1.9.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
67
|
+
lemonade_sdk-8.1.9.dist-info/licenses/NOTICE.md,sha256=RSca9LE5e6pvdWA_LXAUCcACIHPmINKqkRX-AVRqBGo,3499
|
|
68
|
+
lemonade_server/cli.py,sha256=IsyWGDIeiN0MnIaBryLhArHhPj1HD52l6028dNHQCKc,19248
|
|
69
|
+
lemonade_server/model_manager.py,sha256=V8QRf1nlh3wAFtUHoSF_JeAXeR7sfaZE1uTfppcIfcw,20492
|
|
71
70
|
lemonade_server/pydantic_models.py,sha256=49MyOlb5feLUlKsGcI75tWaflWckrItqcSVkdCY4e3A,3269
|
|
72
|
-
lemonade_server/server_models.json,sha256=
|
|
71
|
+
lemonade_server/server_models.json,sha256=0H_G6Jw6Yuz6t0RZnFnq0SbBCsw_cQLe9j24TkyF2eI,12344
|
|
73
72
|
lemonade_server/settings.py,sha256=6nsmPLFJD-UokQDmlx9ZBYMbpnn48So_PuBGWP7Fmfg,1299
|
|
74
|
-
lemonade_sdk-8.1.
|
|
75
|
-
lemonade_sdk-8.1.
|
|
76
|
-
lemonade_sdk-8.1.
|
|
77
|
-
lemonade_sdk-8.1.
|
|
78
|
-
lemonade_sdk-8.1.
|
|
73
|
+
lemonade_sdk-8.1.9.dist-info/METADATA,sha256=rG009a2eVI1apZTBLwIcyQNwdYuVmX33naZwN8Rhbbs,15022
|
|
74
|
+
lemonade_sdk-8.1.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
75
|
+
lemonade_sdk-8.1.9.dist-info/entry_points.txt,sha256=7sRvpNhi1E7amnM7RZo57e8yFF9iA5uuRaIeJ1Xre6w,193
|
|
76
|
+
lemonade_sdk-8.1.9.dist-info/top_level.txt,sha256=10ap5GNiPhalO4V50LRoxA1FqRT9g3Xkia6BITu880k,42
|
|
77
|
+
lemonade_sdk-8.1.9.dist-info/RECORD,,
|
lemonade_server/cli.py
CHANGED
|
@@ -197,15 +197,15 @@ def pull(
|
|
|
197
197
|
for model_name in model_names:
|
|
198
198
|
payload = {"model_name": model_name}
|
|
199
199
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
if
|
|
208
|
-
payload[
|
|
200
|
+
# Add the parameters to the payload
|
|
201
|
+
for key, value in [
|
|
202
|
+
("checkpoint", checkpoint),
|
|
203
|
+
("recipe", recipe),
|
|
204
|
+
("reasoning", reasoning),
|
|
205
|
+
("mmproj", mmproj),
|
|
206
|
+
]:
|
|
207
|
+
if value:
|
|
208
|
+
payload[key] = value
|
|
209
209
|
|
|
210
210
|
# Install the model
|
|
211
211
|
pull_response = requests.post(f"{base_url}/pull", json=payload)
|
|
@@ -225,6 +225,9 @@ def pull(
|
|
|
225
225
|
recipe=recipe,
|
|
226
226
|
reasoning=reasoning,
|
|
227
227
|
mmproj=mmproj,
|
|
228
|
+
# The pull command will download an upgraded model if available, even
|
|
229
|
+
# if we already have a local copy of the model
|
|
230
|
+
do_not_upgrade=False,
|
|
228
231
|
)
|
|
229
232
|
|
|
230
233
|
|
lemonade_server/model_manager.py
CHANGED
|
@@ -201,6 +201,54 @@ class ModelManager:
|
|
|
201
201
|
reasoning=reasoning,
|
|
202
202
|
)
|
|
203
203
|
else:
|
|
204
|
+
# Model is already registered - check if trying to register with different parameters
|
|
205
|
+
existing_model = self.supported_models[model]
|
|
206
|
+
existing_checkpoint = existing_model.get("checkpoint")
|
|
207
|
+
existing_recipe = existing_model.get("recipe")
|
|
208
|
+
existing_reasoning = "reasoning" in existing_model.get("labels", [])
|
|
209
|
+
existing_mmproj = existing_model.get("mmproj", "")
|
|
210
|
+
|
|
211
|
+
# Compare parameters
|
|
212
|
+
checkpoint_differs = checkpoint and checkpoint != existing_checkpoint
|
|
213
|
+
recipe_differs = recipe and recipe != existing_recipe
|
|
214
|
+
reasoning_differs = reasoning and reasoning != existing_reasoning
|
|
215
|
+
mmproj_differs = mmproj and mmproj != existing_mmproj
|
|
216
|
+
|
|
217
|
+
if (
|
|
218
|
+
checkpoint_differs
|
|
219
|
+
or recipe_differs
|
|
220
|
+
or reasoning_differs
|
|
221
|
+
or mmproj_differs
|
|
222
|
+
):
|
|
223
|
+
conflicts = []
|
|
224
|
+
if checkpoint_differs:
|
|
225
|
+
conflicts.append(
|
|
226
|
+
f"checkpoint (existing: '{existing_checkpoint}', new: '{checkpoint}')"
|
|
227
|
+
)
|
|
228
|
+
if recipe_differs:
|
|
229
|
+
conflicts.append(
|
|
230
|
+
f"recipe (existing: '{existing_recipe}', new: '{recipe}')"
|
|
231
|
+
)
|
|
232
|
+
if reasoning_differs:
|
|
233
|
+
conflicts.append(
|
|
234
|
+
f"reasoning (existing: {existing_reasoning}, new: {reasoning})"
|
|
235
|
+
)
|
|
236
|
+
if mmproj_differs:
|
|
237
|
+
conflicts.append(
|
|
238
|
+
f"mmproj (existing: '{existing_mmproj}', new: '{mmproj}')"
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
conflict_details = ", ".join(conflicts)
|
|
242
|
+
|
|
243
|
+
additional_suggestion = ""
|
|
244
|
+
if model.startswith("user."):
|
|
245
|
+
additional_suggestion = f" or delete the existing model first using `lemonade-server delete {model}`"
|
|
246
|
+
|
|
247
|
+
raise ValueError(
|
|
248
|
+
f"Model {model} is already registered with a different configuration. "
|
|
249
|
+
f"Conflicting parameters: {conflict_details}. "
|
|
250
|
+
f"Please use a different model name{additional_suggestion}."
|
|
251
|
+
)
|
|
204
252
|
new_registration_model_config = None
|
|
205
253
|
|
|
206
254
|
# Download the model
|