lemonade-sdk 8.1.2__py3-none-any.whl → 8.1.3__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.

@@ -5,6 +5,7 @@ import importlib
5
5
  import asyncio
6
6
  from contextlib import asynccontextmanager
7
7
  from fastapi import FastAPI
8
+ from lemonade.version import __version__
8
9
 
9
10
  _lazy_imports = {
10
11
  "TextIteratorStreamer": ("transformers", "TextIteratorStreamer"),
@@ -42,7 +43,7 @@ async def lifespan(app: FastAPI):
42
43
  logging.info(
43
44
  "\n"
44
45
  "\n"
45
- "🍋 Lemonade Server Ready!\n"
46
+ f"🍋 Lemonade Server v{__version__} Ready!\n"
46
47
  f"🍋 Open http://{app.host_}:{app.port} in your browser for:\n"
47
48
  "🍋 💬 chat\n"
48
49
  "🍋 💻 model management\n"
@@ -52,7 +53,7 @@ async def lifespan(app: FastAPI):
52
53
  logging.info(
53
54
  "\n"
54
55
  "\n"
55
- "[Lemonade] Lemonade Server Ready!\n"
56
+ f"[Lemonade] Lemonade Server v{__version__} Ready!\n"
56
57
  f"[Lemonade] Open http://{app.host_}:{app.port} in your browser for:\n"
57
58
  "[Lemonade] chat\n"
58
59
  "[Lemonade] model management\n"
lemonade/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "8.1.2"
1
+ __version__ = "8.1.3"
@@ -1,18 +1,18 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lemonade-sdk
3
- Version: 8.1.2
3
+ Version: 8.1.3
4
4
  Summary: Lemonade SDK: Your LLM Aide for Validation and Deployment
5
5
  Author-email: lemonade@amd.com
6
- Requires-Python: >=3.10, <3.13
6
+ Requires-Python: >=3.10, <3.14
7
7
  Description-Content-Type: text/markdown
8
8
  License-File: LICENSE
9
9
  License-File: NOTICE.md
10
10
  Requires-Dist: invoke>=2.0.0
11
- Requires-Dist: onnx<1.18.0,>=1.11.0
11
+ Requires-Dist: onnx==1.18.0
12
12
  Requires-Dist: pyyaml>=5.4
13
13
  Requires-Dist: typeguard>=2.3.13
14
14
  Requires-Dist: packaging>=20.9
15
- Requires-Dist: numpy<2.0.0
15
+ Requires-Dist: numpy
16
16
  Requires-Dist: fasteners
17
17
  Requires-Dist: GitPython>=3.1.40
18
18
  Requires-Dist: psutil>=6.1.1
@@ -41,9 +41,10 @@ Requires-Dist: accelerate; extra == "dev"
41
41
  Requires-Dist: datasets; extra == "dev"
42
42
  Requires-Dist: pandas>=1.5.3; extra == "dev"
43
43
  Requires-Dist: matplotlib; extra == "dev"
44
- Requires-Dist: model-generate==1.5.0; (platform_system == "Windows" and python_version == "3.10") and extra == "dev"
45
44
  Requires-Dist: human-eval-windows==1.0.4; extra == "dev"
46
45
  Requires-Dist: lm-eval[api]; extra == "dev"
46
+ Provides-Extra: model-generate
47
+ Requires-Dist: model-generate==1.5.0; (platform_system == "Windows" and python_version == "3.10") and extra == "model-generate"
47
48
  Provides-Extra: oga-hybrid
48
49
  Requires-Dist: lemonade-sdk[oga-ryzenai]; extra == "oga-hybrid"
49
50
  Provides-Extra: oga-unified
@@ -105,7 +106,7 @@ Dynamic: summary
105
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" />
106
107
  </a>
107
108
  <a href="docs/README.md#installation" title="Check out our instructions">
108
- <img src="https://img.shields.io/badge/Python-3.10%20%7C%203.12-blue?logo=python&logoColor=white" alt="Made with Python" />
109
+ <img src="https://img.shields.io/badge/Python-3.10--3.13-blue?logo=python&logoColor=white" alt="Made with Python" />
109
110
  </a>
110
111
  <a href="https://github.com/lemonade-sdk/lemonade/blob/main/docs/contribute.md" title="Contribution Guide">
111
112
  <img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" alt="PRs Welcome" />
@@ -4,7 +4,7 @@ lemonade/cache.py,sha256=5iZbk273TiTMqK_vdzPOPYTo6VsWW2gNByOISA9zi1w,3002
4
4
  lemonade/cli.py,sha256=9Pcs3PcrWC2F8_pcBaz09xHUICIJTvpemBdPGyXkjIk,4395
5
5
  lemonade/sequence.py,sha256=KSH7BPsiyDKsOsg_ziQKEGsDwMmuO_YbgPRBxkZd0pw,13267
6
6
  lemonade/state.py,sha256=sdSezla7Cd7KYL90xY3p9kcNV4ndSyN6UvNLOr3vBMA,5261
7
- lemonade/version.py,sha256=EsLdncrDNNSYcAkb6bacgIFA7Oh4EZnzpp9alKokT5A,22
7
+ lemonade/version.py,sha256=gnc1sclqzDLnQB9vbqA0LgSMz4H-bYCuu--_P-HWhAc,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
@@ -38,7 +38,7 @@ lemonade/tools/llamacpp/utils.py,sha256=Auid9FepxwLIgDahaDNIxwz8kP_ap8Opd3eSF6t6
38
38
  lemonade/tools/oga/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  lemonade/tools/oga/bench.py,sha256=PJXv4UchcS2YPwijNzef8DY4DSAKYxIYY1ycHuH3T34,5005
40
40
  lemonade/tools/oga/load.py,sha256=6Pf_QrHpIXDbfpTwFNRj4RmWTxI-RImhYuqRvmTVgmY,33722
41
- lemonade/tools/oga/utils.py,sha256=Xd7tmNr69u_bCut0hZqA7saUR3NFZlp4bvWo54mOZb0,16918
41
+ lemonade/tools/oga/utils.py,sha256=F8UVLKlfYcLa2SUqlehar8-jaX2Aw4u58DjHNNvLdOA,17675
42
42
  lemonade/tools/quark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  lemonade/tools/quark/quark_load.py,sha256=FJ4LJKTToZbHHWVEOBLadae1a3jCnnY4KvXySHbkJMA,5589
44
44
  lemonade/tools/quark/quark_quantize.py,sha256=hwoaXhpBIORvJ16MvewphPkaDEQn3BAgXq5o82Gc-_s,16599
@@ -46,27 +46,31 @@ lemonade/tools/report/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
46
46
  lemonade/tools/report/llm_report.py,sha256=bVHhwCINA-Ok2EdSwAsLubsc83N3KWOVuwTguw7jDcE,6676
47
47
  lemonade/tools/report/table.py,sha256=ssqy1bZqF-wptNzKEOj6_9REtCNZyXO8R5vakAtg3R4,27973
48
48
  lemonade/tools/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- lemonade/tools/server/llamacpp.py,sha256=KZO4npzefvbaPvlZbpCYsdW0tMSfmmupT8gaK9y65I8,17962
50
- lemonade/tools/server/serve.py,sha256=jk343MlY9fdWbsw3JaD5CO11r6LUKJUHyp2f--6t5i4,55729
49
+ lemonade/tools/server/llamacpp.py,sha256=jVkaPx1ZbHYiJll3wnDR0fh-e0yfg7UB0BXlLWPx4dE,20998
50
+ lemonade/tools/server/serve.py,sha256=3wnB19YThQLHkjbzy7PCWppQY_j5xKB24GcqM8IybxI,58857
51
51
  lemonade/tools/server/tool_calls.py,sha256=xrAlQwKG-nv2xLlf8f9CDSaUbyMn8ZtHkds9iZLG9K8,5230
52
52
  lemonade/tools/server/tray.py,sha256=YJ4-vJlM6tJ0ojY_wVM6COuNscETFkQPt-BaNqYa9YQ,17640
53
53
  lemonade/tools/server/webapp.py,sha256=8Das5yXOaSBLZmSZ_eddJajQFxBhvl5D6GI_hHlGbE0,1040
54
54
  lemonade/tools/server/static/favicon.ico,sha256=hMmP9qGJNeZ0mFS86JIqPbZstXMZn0Z76_HfHQpREAU,126745
55
- lemonade/tools/server/static/styles.css,sha256=M_JrH_vML65MWun-C8XCvLOFw35qZURSa77Fk4fVngQ,30029
56
- lemonade/tools/server/static/webapp.html,sha256=xPjqQgZVp_JJednxJ0rgXRwNd8fomqIav7Ap0pWlhd4,54440
57
- lemonade/tools/server/utils/port.py,sha256=df1gQ-W5BgDSbOOEY548xTBqRDENtDLRmCvF-iP9JPk,2190
55
+ lemonade/tools/server/static/styles.css,sha256=X_mqf3XCOo_pZEqkDiVzMGCy8ARseEBq5DdGnAdfVk0,43383
56
+ lemonade/tools/server/static/webapp.html,sha256=FX2MZUsljfgxxuF12KBdgvNkso_z-sHewWc0SEGGcGM,18138
57
+ lemonade/tools/server/static/js/chat.js,sha256=BTvREuEt0NrN8qhAuda5tTAoUN6tbsoukevA-zyTrwQ,27193
58
+ lemonade/tools/server/static/js/model-settings.js,sha256=JXHeG7xVrRU181Hj7CZflERAi1Z6t-qwYFR4aH5nf5I,5820
59
+ lemonade/tools/server/static/js/models.js,sha256=bbX7c8B59ioim86T3x9PFESvF8y3cHPYUO6nhc4SCDs,32500
60
+ lemonade/tools/server/static/js/shared.js,sha256=4iqDNWiKEB7eYS4fdnTy-RwO_ksROrLYLmT2YSomG1M,17065
61
+ lemonade/tools/server/utils/port.py,sha256=J7-g-Aqygb50jNoHLhhRfBZVM-uhGlcB5-oYBAehvgw,2263
58
62
  lemonade/tools/server/utils/system_tray.py,sha256=b9lvNv9chJKQxvmH7qzAuUe6H9HsLu7pdHFqGlAJaL0,12654
59
63
  lemonade/tools/server/utils/thread.py,sha256=Z-PDzGcpgfN2qxTmtlROWqrUN0B2fXdPrqo_J10fR_w,2772
60
64
  lemonade_install/__init__.py,sha256=26zohKg2jgr_5y7tObduWMYQg8zCTWMZHL8lfi2zZVQ,40
61
65
  lemonade_install/install.py,sha256=Zl_JtEIhbqZZTvxcqtq895IomEN-JNxp9xOZEtahMHQ,28289
62
- lemonade_sdk-8.1.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
63
- lemonade_sdk-8.1.2.dist-info/licenses/NOTICE.md,sha256=B8lEqi4QE41J9ljz4Riv2JgHD1v8GCZE6nNBHO3KIA0,2135
64
- lemonade_server/cli.py,sha256=vFdqFB3E5ivlVM-ywcnKsEy0vKFutExDnVCjO7akXcw,18486
66
+ lemonade_sdk-8.1.3.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
67
+ lemonade_sdk-8.1.3.dist-info/licenses/NOTICE.md,sha256=B8lEqi4QE41J9ljz4Riv2JgHD1v8GCZE6nNBHO3KIA0,2135
68
+ lemonade_server/cli.py,sha256=-haIK4Q9cYFwna5-m6vgxW9qMaGW-_lDFB49zXxDk2A,18755
65
69
  lemonade_server/model_manager.py,sha256=cFaHJVOsabwekAPryXAPdo6qrXYBD_yht7XPg2QImqc,10791
66
- lemonade_server/pydantic_models.py,sha256=qEvF7x7AuHCHMiByVzGGuLdQTNs233Sw9uQq5cpI6is,2721
67
- lemonade_server/server_models.json,sha256=pphygJLu_kfWod6Afws9DG1CwhTKFo8rL_3cz8m9kzg,11483
68
- lemonade_sdk-8.1.2.dist-info/METADATA,sha256=wUJMAvKRZlDpSYYAYkB-c0hGC0-O9rPp1N39htmxuQo,17065
69
- lemonade_sdk-8.1.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
70
- lemonade_sdk-8.1.2.dist-info/entry_points.txt,sha256=7sRvpNhi1E7amnM7RZo57e8yFF9iA5uuRaIeJ1Xre6w,193
71
- lemonade_sdk-8.1.2.dist-info/top_level.txt,sha256=10ap5GNiPhalO4V50LRoxA1FqRT9g3Xkia6BITu880k,42
72
- lemonade_sdk-8.1.2.dist-info/RECORD,,
70
+ lemonade_server/pydantic_models.py,sha256=oTFnDVCax2Gerz7RBJOJF0FVQjKoUPJZbBo-EgogQyk,3161
71
+ lemonade_server/server_models.json,sha256=DAdG4ebIt5Dy5MM3kmXn1pO0XbNMph1gdpzbacBDVuc,11664
72
+ lemonade_sdk-8.1.3.dist-info/METADATA,sha256=3As4CPILSkJVZMKsyqHZX6o9P8aBsixEJuQTtOas25w,17086
73
+ lemonade_sdk-8.1.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
74
+ lemonade_sdk-8.1.3.dist-info/entry_points.txt,sha256=7sRvpNhi1E7amnM7RZo57e8yFF9iA5uuRaIeJ1Xre6w,193
75
+ lemonade_sdk-8.1.3.dist-info/top_level.txt,sha256=10ap5GNiPhalO4V50LRoxA1FqRT9g3Xkia6BITu880k,42
76
+ lemonade_sdk-8.1.3.dist-info/RECORD,,
lemonade_server/cli.py CHANGED
@@ -4,6 +4,13 @@ import os
4
4
  from typing import Tuple, Optional
5
5
  import psutil
6
6
  from typing import List
7
+ from lemonade_server.pydantic_models import (
8
+ DEFAULT_PORT,
9
+ DEFAULT_HOST,
10
+ DEFAULT_LOG_LEVEL,
11
+ DEFAULT_LLAMACPP_BACKEND,
12
+ DEFAULT_CTX_SIZE,
13
+ )
7
14
 
8
15
 
9
16
  # Error codes for different CLI scenarios
@@ -47,7 +54,7 @@ class ModelLoadError(Exception):
47
54
 
48
55
  def serve(
49
56
  port: int = None,
50
- host: str = "localhost",
57
+ host: str = None,
51
58
  log_level: str = None,
52
59
  tray: bool = False,
53
60
  use_thread: bool = False,
@@ -60,21 +67,14 @@ def serve(
60
67
 
61
68
  # Otherwise, start the server
62
69
  print("Starting Lemonade Server...")
63
- from lemonade.tools.server.serve import (
64
- Server,
65
- DEFAULT_PORT,
66
- DEFAULT_LOG_LEVEL,
67
- DEFAULT_LLAMACPP_BACKEND,
68
- DEFAULT_CTX_SIZE,
69
- )
70
+ from lemonade.tools.server.serve import Server
70
71
 
71
72
  port = port if port is not None else DEFAULT_PORT
73
+ host = host if host is not None else DEFAULT_HOST
72
74
  log_level = log_level if log_level is not None else DEFAULT_LOG_LEVEL
73
75
  llamacpp_backend = (
74
76
  llamacpp_backend if llamacpp_backend is not None else DEFAULT_LLAMACPP_BACKEND
75
77
  )
76
-
77
- # Use ctx_size if provided, otherwise use default
78
78
  ctx_size = ctx_size if ctx_size is not None else DEFAULT_CTX_SIZE
79
79
 
80
80
  # Start the server
@@ -274,8 +274,8 @@ def run(
274
274
  import time
275
275
 
276
276
  # Start the server if not running
277
- _, port = get_server_info()
278
- server_previously_running = port is not None
277
+ _, running_port = get_server_info()
278
+ server_previously_running = running_port is not None
279
279
  if not server_previously_running:
280
280
  port, server_thread = serve(
281
281
  port=port,
@@ -471,27 +471,41 @@ def developer_entrypoint():
471
471
 
472
472
  def _add_server_arguments(parser):
473
473
  """Add common server arguments to a parser"""
474
- parser.add_argument("--port", type=int, help="Port number to serve on")
474
+
475
475
  parser.add_argument(
476
- "--host", type=str, help="Address to bind for connections", default="localhost"
476
+ "--port",
477
+ type=int,
478
+ help="Port number to serve on",
479
+ default=DEFAULT_PORT,
480
+ )
481
+ parser.add_argument(
482
+ "--host",
483
+ type=str,
484
+ help="Address to bind for connections",
485
+ default=DEFAULT_HOST,
477
486
  )
478
487
  parser.add_argument(
479
488
  "--log-level",
480
489
  type=str,
481
490
  help="Log level for the server",
482
491
  choices=["critical", "error", "warning", "info", "debug", "trace"],
483
- default="info",
492
+ default=DEFAULT_LOG_LEVEL,
484
493
  )
485
494
  parser.add_argument(
486
495
  "--llamacpp",
487
496
  type=str,
488
- help=f"LlamaCpp backend to use",
497
+ help="LlamaCpp backend to use",
489
498
  choices=["vulkan", "rocm"],
499
+ default=DEFAULT_LLAMACPP_BACKEND,
490
500
  )
491
501
  parser.add_argument(
492
502
  "--ctx-size",
493
503
  type=int,
494
- help="Context size for the model (default: 4096 for llamacpp, truncates prompts for other recipes)",
504
+ help=(
505
+ f"Context size for the model (default: {DEFAULT_CTX_SIZE} for llamacpp, "
506
+ "truncates prompts for other recipes)"
507
+ ),
508
+ default=DEFAULT_CTX_SIZE,
495
509
  )
496
510
 
497
511
 
@@ -1,10 +1,13 @@
1
+ import os
1
2
  from typing import Optional, Union, List
2
3
 
3
4
  from pydantic import BaseModel
4
5
 
5
- # Set to a high number to allow for interesting experiences in real apps
6
- # Tests should use the max_new_tokens argument to set a lower value
7
- DEFAULT_MAX_NEW_TOKENS = 1500
6
+ DEFAULT_PORT = int(os.getenv("LEMONADE_PORT", "8000"))
7
+ DEFAULT_HOST = os.getenv("LEMONADE_HOST", "localhost")
8
+ DEFAULT_LOG_LEVEL = os.getenv("LEMONADE_LOG_LEVEL", "info")
9
+ DEFAULT_LLAMACPP_BACKEND = os.getenv("LEMONADE_LLAMACPP", "vulkan")
10
+ DEFAULT_CTX_SIZE = int(os.getenv("LEMONADE_CTX_SIZE", "4096"))
8
11
 
9
12
 
10
13
  class LoadConfig(BaseModel):
@@ -39,6 +42,9 @@ class CompletionRequest(BaseModel):
39
42
  logprobs: int | None = False
40
43
  stop: list[str] | str | None = None
41
44
  temperature: float | None = None
45
+ repeat_penalty: float | None = None
46
+ top_k: int | None = None
47
+ top_p: float | None = None
42
48
  max_tokens: int | None = None
43
49
 
44
50
 
@@ -56,6 +62,9 @@ class ChatCompletionRequest(BaseModel):
56
62
  logprobs: int | None = False
57
63
  stop: list[str] | str | None = None
58
64
  temperature: float | None = None
65
+ repeat_penalty: float | None = None
66
+ top_k: int | None = None
67
+ top_p: float | None = None
59
68
  tools: list[dict] | None = None
60
69
  max_tokens: int | None = None
61
70
  max_completion_tokens: int | None = None
@@ -95,6 +104,9 @@ class ResponsesRequest(BaseModel):
95
104
  model: str
96
105
  max_output_tokens: int | None = None
97
106
  temperature: float | None = None
107
+ repeat_penalty: float | None = None
108
+ top_k: int | None = None
109
+ top_p: float | None = None
98
110
  stream: bool = False
99
111
 
100
112
 
@@ -268,8 +268,8 @@
268
268
  "checkpoint": "unsloth/cogito-v2-preview-llama-109B-MoE-GGUF:Q4_K_M",
269
269
  "mmproj": "mmproj-F16.gguf",
270
270
  "recipe": "llamacpp",
271
- "suggested": true,
272
- "labels": ["vision","hot"]
271
+ "suggested": false,
272
+ "labels": ["vision"]
273
273
  },
274
274
  "nomic-embed-text-v1-GGUF": {
275
275
  "checkpoint": "nomic-ai/nomic-embed-text-v1-GGUF:Q4_K_S",
@@ -305,7 +305,7 @@
305
305
  "checkpoint": "Qwen/Qwen2.5-Coder-32B-Instruct-GGUF:Q4_K_M",
306
306
  "recipe": "llamacpp",
307
307
  "suggested": true,
308
- "labels": ["reasoning", "coding"]
308
+ "labels": ["coding"]
309
309
  },
310
310
  "gpt-oss-120b-GGUF": {
311
311
  "checkpoint": "unsloth/gpt-oss-120b-GGUF:Q4_K_M",
@@ -318,5 +318,11 @@
318
318
  "recipe": "llamacpp",
319
319
  "suggested": true,
320
320
  "labels": ["hot", "reasoning"]
321
+ },
322
+ "GLM-4.5-Air-UD-Q4K-XL-GGUF": {
323
+ "checkpoint": "unsloth/GLM-4.5-Air-GGUF:UD-Q4_K_XL",
324
+ "recipe": "llamacpp",
325
+ "suggested": true,
326
+ "labels": ["reasoning","hot"]
321
327
  }
322
328
  }