ドキュメント

インテグレーション

ステータスレポートと警告

ベータ版機能

プラグインサポートは現在プライベートベータ版です。こちらからベータ版に参加してください。

ツールの実行に時間がかかる場合があります。その場合、ユーザーに何が起こっているかを知ってもらうために、ステータスアップデートを提供すると役立ちます。それ以外の場合は、潜在的な問題についてユーザーに警告したい場合があります。

ステータスアップデートや警告を送信するには、ツール実装関数の2番目のパラメータにある status および warn メソッドを使用できます。

以下の例では、指定された秒数待機し、待機時間が10秒を超える場合はステータスアップデートと警告を提供するツールの実装方法を示しています。

import { tool, Tool, ToolsProviderController } from "@lmstudio/sdk";
import { z } from "zod";

export async function toolsProvider(ctl: ToolsProviderController) {
  const tools: Tool[] = [];

  const waitTool = tool({
    name: `wait`,
    description: "Wait for a specified number of seconds.",
    parameters: { seconds: z.number().min(1) },
    implementation: async ({ seconds }, { status, warn }) => {
      if (seconds > 10) {
        warn("The model asks to wait for more than 10 seconds.");
      }
      for (let i = 0; i < seconds; i++) {
        status(`Waiting... ${i + 1}/${seconds} seconds`);
        await new Promise((resolve) => setTimeout(resolve, 1000));
      }
    },
  });
  tools.push(waitTool);

  return tools; // Return the tools array
}

注: ステータスアップデートと警告はユーザーにのみ表示されます。モデルにもこれらのメッセージを表示させたい場合は、ツールの戻り値の一部としてそれらを返す必要があります。

中止の処理

ツールが実行中の間に、ユーザーによって予測が中止される可能性があります。その場合、ツールの実装関数に渡される AbortSignal オブジェクトを処理することで、中止を適切に処理する必要があります。

import { tool, Tool, ToolsProviderController } from "@lmstudio/sdk";
import { z } from "zod";

export async function toolsProvider(ctl: ToolsProviderController) {
  const tools: Tool[] = [];

  const fetchTool = tool({
    name: `fetch`,
    description: "Fetch a URL using GET method.",
    parameters: { url: z.string() },
    implementation: async ({ url }, { signal }) => {
      const response = await fetch(url, {
        method: "GET",
        signal, // <-- Here, we pass the signal to fetch to allow cancellation
      });
      if (!response.ok) {
        return `Error: Failed to fetch ${url}: ${response.statusText}`;
      }
      const data = await response.text();
      return {
        status: response.status,
        headers: Object.fromEntries(response.headers.entries()),
        data: data.substring(0, 1000), // Limit to 1000 characters
      };
    },
  });
  tools.push(fetchTool);

  return tools;
}

AbortSignal については、MDN ドキュメントで詳しく学ぶことができます。

このページのソースは GitHub で入手できます。