SDK 可通过 PyPI 安装,命令如下:
$ pip install lmstudio
出于开发和预发布测试目的,也支持从仓库 URL 或本地克隆进行安装。
LM Studio SDK 的基础组件是(同步)Client。它应被创建一次,并用于管理与 LM Studio 实例的底层 WebSocket 连接。
不过,为了方便交互式使用,SDK 提供了一个顶层的便捷 API(此 API 会隐式创建一个默认的 Client 实例,该实例将在 Python 解释器终止前保持活动状态)。
使用此便捷 API,从已加载的 LLM 请求文本补全非常简单:
import lmstudio as lms
model = lms.llm()
model.complete("Once upon a time,")
请求聊天响应则只需额外一步,即设置一个 Chat 助手来管理聊天历史并将其包含在响应预测请求中:
import lmstudio as lms
EXAMPLE_MESSAGES = (
"My hovercraft is full of eels!",
"I will not buy this record, it is scratched."
)
model = lms.llm()
chat = lms.Chat("You are a helpful shopkeeper assisting a foreign traveller")
for message in EXAMPLE_MESSAGES:
chat.add_user_message(message)
print(f"Customer: {message}")
response = model.respond(chat)
chat.add_assistant_response(response)
print(f"Shopkeeper: {response}")
更多 SDK 示例和使用建议可在主 LM Studio Python SDK 文档 中找到。
LM Studio Python SDK 使用三部分 X.Y.Z 数字版本标识符:
X:当重要依赖项的最低版本更新时递增(例如,放弃对旧版本 Python 或 LM Studio 的支持)。此版本号部分增加时,先前已弃用的功能可能会被移除。Y:当添加新功能或引入其他显著变更(例如支持更多 Python 版本)时递增。此版本号部分增加时,可能会引入新的弃用警告。Z:针对不包含其他变更的错误修复版本递增。为先前未检测到的情况添加异常和警告被视为错误修复。此版本管理策略有意与语义化版本相似,但在版本号各部分何时更新的具体细节上有所不同。
在正式发布之前可能会发布候选版本,但这通常只会在最终确定发布前寻求对特定功能的更广泛反馈时发生。
在新版本准备之外,SDK 仓库将在名义上的 Python 包版本中包含一个 .devN 后缀。
$ git clone https://github.com/lmstudio-ai/lmstudio-python
$ cd lmstudio-python
为了能够运行 tox -e sync-sdk-schema,还需要确保 lmstudio-js 子模块已更新:
$ git submodule update --init --recursive
为了开发 Python SDK,你需要安装 :pypi:pdm、:pypi:tox 和 :pypi:tox-pdm(其他所有操作都可以通过 tox 环境执行)。
有了这些工具,就可以按照下面的描述设置默认开发环境并执行其他命令。
处理此问题的最简单选项是安装 uv,然后使用其 uv tool 命令来设置 pdm 和第二个包含 tox + tox-pdm 的环境。pipx 是完成此任务的另一个合理选择。
为了使用 Python SDK,你只需要某种形式的 Python 环境管理器(因为 lmstudio-python 将 lmstudio 包发布到了 PyPI)。
推荐在本地执行的检查集可通过 tox 中的 check 标记访问:
$ tox -m check
这将运行与 static 和 test 标记(如下所述)相同的检查。
项目源代码使用 :pypi:ruff 进行自动格式化和代码检查。它还使用严格模式的 :pypi:mypy 来静态检查 Python API 是否按预期访问。
所有这些命令都可以通过 tox 调用:
$ tox -e format
$ tox -e lint
$ tox -e typecheck
代码检查和类型检查可以一起使用 static 标记执行:
$ tox -m static
避免使用 # noqa 注释来抑制这些警告——应尽可能修复警告。# noqa 注释保留用于那些推荐样式导致严重可读性问题,且没有更明确的机制(例如 typing.cast)来指示跳过哪个检查的罕见情况。
当自动格式化程序使可读性变差而不是更好时(例如,将有意跨多行的列表折叠为单行,或破坏行尾注释的对齐),可以根据需要使用 # fmt: off/on 和 # fmt: skip 注释。
项目的测试使用 :pypi:pytest 测试框架编写。:pypi:tox 用于在多个 Python 版本中自动设置和执行这些测试。其中一个被指定为默认测试目标,可通过 test 标记访问:
$ tox -m test
你也可以通过直接指定目标环境来使用其他已定义的版本:
$ tox -e py3.11
还定义了其他标签用于运行最旧的测试环境、最新的测试环境和所有测试环境:
$ tox -m test_oldest
$ tox -m test_latest
$ tox -m test_all
为确保运行测试前所有必需的模型都已加载,请运行以下命令:
$ tox -e load-test-models
tox 已配置为将其接收到的任何额外参数转发给 pytest。这使得可以使用 pytest 的丰富 CLI。特别是,你可以使用 pytest 提供的所有选项来选择测试:
$ # 使用文件名
$ tox -m test -- tests/test_basics.py
$ # 使用标记
$ tox -m test -- -m "slow"
$ # 使用关键字文本搜索
$ tox -m test -- -k "catalog"
关于运行和更新测试的更多说明可在 tests/README.md 文件中找到。
src/lmstudio/_sdk_models 的内容由 sdk-schema 中的 sync-sdk-schema.py 脚本自动生成,不应直接修改。运行 tox -e sync-sdk-schema 以从现有的 lmstudio-js 模式导出重新生成 Python 子模块(例如,在修改数据模型模板后)。在将 sdk-schema/lmstudio-js 子模块本身更新到 lmstudio-js JSON API 的较新版本后,运行 tox -e sync-sdk-schema -- --regen-schema。json_api.SessionData 基类对于定义丰富的结果对象非常有用,这些对象提供了调用回 SDK 的额外方法(例如,这就是下载的模型列表如何提供其接口来加载模型的新实例)。