lmstudio-python と lmstudio-js を紹介

本日、lmstudio-python (1.0.1) と lmstudio-js (1.0.0) をローンチします。
LM Studio の Python および TypeScript 向けソフトウェア開発キットです。どちらのライブラリも MIT ライセンスで、Github でオープンに開発されています。
さらに、LM Studio 初の Agent 向け API、「.act()」呼び出しをご紹介します。これは、プロンプトとツールを与えると、モデルがタスクを完了する(または諦める)まで、自律的に複数の実行「ラウンド」を繰り返します。
SDK を使用すると、LM Studio デスクトップアプリのために開発した AI システム機能と同じものにアクセスできます。これらの API を公開することは常に計画されており、ソフトウェアスタックはこのことを念頭に置いて設計されています。LM Studio は、コア機能のために同じ公開 lmstudio-js API を使用しています。あなたのアプリも同様にできるようになりました。
私たちの目標は、LM Studio の開発中に私たちが既に解決した問題(CUDA、Vulkan の自動ソフトウェア依存関係管理、マルチ GPU サポート(NVIDIA、AMD、Apple)、マルチオペレーティングシステムサポート(Windows、macOS、Linux)、デフォルトの LLM パラメータ選択など)を、あなた自身が解決する必要なく、独自のツールを構築できるようにすることです。
lmstudio-python または lmstudio-js を使用するアプリは、LM Studio が実行されている(フォアグラウンドまたはヘッドレスモード)あらゆるコンピュータで実行できます。
SDK は Python と TypeScript の両方で利用可能です。pip または npm を介してインストールできます。
pip install lmstudio
Python では、スクリプト、ツール、または Python REPL で `lmstudio` パッケージを使用します。
TypeScript では、Node.js またはブラウザアプリに `@lmstudio/sdk` パッケージをインポートします。
LM Studio SDK を介して公開されるコア API は以下の通りです。
TypeScript では、SDK API は Node 環境とブラウザ(CORS が有効な場合)の両方で動作します。Python では、便利な同期 API と、スコープ付きリソース管理のためのセッションベースの非同期 API の両方をサポートしています。
API の完全なリストについては、Python および TypeScript の API リファレンスを参照してください。
lmstudio-python または lmstudio-js を使用するアプリ、ツール、スクリプトは、ハードウェアやソフトウェアを設定することなく、最新の llama.cpp または MLX モデルを実行できます。システムは、指定されたモデルに適切な推論エンジンを自動的に選択し、利用可能なリソースに基づいて(GPU オフロードなどの)パラメータを選択します。
たとえば、簡単なプロンプトに「とにかく」モデルを使いたい場合は、これを実行します。
model = lms.llm() # gets the current model if loaded
ただし、より具体的なニーズがある場合は、モデルの新しいインスタンスをロードし、すべてのパラメータを手動で設定できます。詳細については、Python ドキュメント | TypeScript ドキュメントを参照してください。
LLM の時代(2023 年中頃)には、モデルから特定の出力形式を確実に得るための最善の方法は、次のような嘆願でプロンプトすることでした。
USER: "有効な JSON のみで応答してください。最後の } ブラケット以降には何も出力しないでください。"
現在では、はるかに優れた方法が存在します。たとえば、LM Studio が llama.cpp および MLX モデルでサポートしている、文法制約付きサンプリング([1] [2])などです。
SDK は、Pydantic(Python 用)または zod(TypeScript 用)を使用してモデルの出力形式を強制する API を公開します。どちらのライブラリでも、JSON スキーマを使用することもできます。
from pydantic import BaseModel
# A class based schema for a book
class BookSchema(BaseModel):
title: str
author: str
year: int
result = model.respond("Tell me about The Hobbit",
response_format=BookSchema)
book = result.parsed
print(book)
# ^
# Note that `book` is correctly typed as
# { title: string, author: string, year: number }
Python ドキュメントで詳細をご覧ください。
import { z } from "zod";
// A zod schema for a book
const bookSchema = z.object({
title: z.string(),
author: z.string(),
year: z.number().int(),
});
const result = await model.respond("Tell me about The Hobbit.",
{ structured: bookSchema }
);
const book = result.parsed;
console.info(book);
// ^
// Note that `book` is correctly typed as
// { title: string, author: string, year: number }
TypeScript ドキュメントで詳細をご覧ください。
「.respond()」のような標準的な LLM API に加えて、SDK は新しい API「.act()」を導入しています。この API は、Agent 向けプログラミングのために設計されており、モデルにタスクとツールのセットが与えられ、タスクの完了を試みるために自律的に動作します。
LLM は主にテキスト入力・テキスト出力のプログラムです。そのため、「LLM はどのようにツールを使用できるのか?」と疑問に思うかもしれません。答えは、一部の LLM は人間に対してツールを呼び出すように求め、ツールの出力を特定の形式で提供されることを期待するように訓練されていることです。
電話で誰かにコンピューターサポートを提供していると想像してください。「このコマンドを実行して... OK、それは何を出力しましたか?... OK、次にそこをクリックして、何が書かれているか教えてください...」と言うかもしれません。この場合、LLM はあなた自身であり、電話の向こう側の人物を通じて間接的に「ツールを呼び出している」のです。
ツールの実行、その出力を LLM に提供し、次に LLM が次に何をすべきかを決定するのを待つという複合プロセスを説明するために、実行「ラウンド」の概念を導入します。
実行ラウンド
• run a tool → ↑ • provide the result to the LLM → │ • wait for the LLM to generate a response │ └────────────────────────────────────────┘ └➔ (return)
モデルは、最終結果を返す前に、ツールを複数回実行することを選択する場合があります。たとえば、LLM がコードを作成している場合、コンパイルまたはプログラムを実行し、エラーを修正し、望む結果が得られるまで再度実行する、ということを繰り返すことがあります。
これを念頭に置いて、.act() API は自動的な「マルチラウンド」ツール呼び出し API であると言えます。
TypeScript では、ツールを説明と関数で定義します。Python では、関数を直接渡すこともできます!
import lmstudio as lms
def multiply(a: float, b: float) → float:
"""Given two numbers a and b. Returns the product of them."""
return a * b
model = lms.llm("qwen2.5-7b-instruct")
model.act(
"What is the result of 12345 multiplied by 54321?",
[multiply],
on_message=print,
)
LLM がツールを使用することを選択すると、SDK はそれを実行し、自動的に(クライアントプロセスで)結果を LLM に返します。モデルは、たとえば、LLM に進め方に関する情報を提供したソフトウェアエラーがあった場合など、再度ツールを実行することを選択する場合があります。
実行が進むにつれて、SDK はコールバックを介して開発者にイベントストリームを提供します。これにより、LLM が何をしているか、どのツールを使用しているか、どのように進んでいるかを示すインタラクティブな UI を構築できます。
.act() API を使い始めるには、Python の .act() および TypeScript の .act() を参照してください。
どちらのライブラリも MIT ライセンスで、最新の貢献ガイドが含まれています。オープンソース開発に参加したい場合は、いつでも歓迎します!
その他の LM Studio オープンソースソフトウェアには以下が含まれます。
SDK の使用を開始するにあたり、皆様からのフィードバックをお待ちしております。何がうまくいっていて、何がうまくいっていないか?どのような機能が今後必要になると思いますか?もちろん、バグに遭遇した場合も同様です。
それぞれの Github リポジトリにイシューを作成してください。スターをいただけると幸いです 🙏⭐️。