src / toolsProvider.ts
src / toolsProvider.ts
// src/toolsProvider.ts
import { type Tool, type ToolsProviderController } from "@lmstudio/sdk";
import { createAnnotateImageTool } from "./tools/annotate_image.js";
import { createAnalyseImageTool } from "./tools/analyse_image.js";
import { createDetectObjectTool } from "./tools/detect_object.js";
import { globalConfigSchematics } from "./config.js";
export async function toolsProvider(ctl: ToolsProviderController) {
try {
const getter: any =
(ctl as any).getGlobalPluginConfig || (ctl as any).getGlobalConfig;
const gcfg = getter ? getter.call(ctl, globalConfigSchematics) : null;
if (gcfg) {
const embeddingBaseUrl = gcfg.get("embeddingBaseUrl");
if (typeof embeddingBaseUrl === "string" && embeddingBaseUrl.trim()) {
process.env.LMSTUDIO_VISION_API_BASE_URL = embeddingBaseUrl.trim();
}
const embeddingApiKey = gcfg.get("embeddingApiKey");
if (typeof embeddingApiKey === "string") {
process.env.LMSTUDIO_VISION_API_KEY = embeddingApiKey;
}
const prompt = gcfg.get("visionPrompt");
if (typeof prompt === "string") {
process.env.VISION_PROMPT = prompt;
}
const inclMeta = gcfg.get("includeGenerationMetadata");
if (typeof inclMeta === "boolean") {
process.env.INCLUDE_GENERATION_METADATA = inclMeta ? "true" : "false";
}
const previewInChat = gcfg.get("PREVIEW_IN_CHAT");
if (typeof previewInChat === "boolean") {
process.env.PREVIEW_IN_CHAT = previewInChat ? "true" : "false";
}
const httpPort = gcfg.get("HTTP_SERVER_PORT");
if (typeof httpPort === "number" && Number.isFinite(httpPort) && httpPort > 0) {
process.env.HTTP_SERVER_PORT = String(Math.floor(httpPort));
}
const visionMaxTokens = gcfg.get("serverMaxTokens");
if (typeof visionMaxTokens === "number" && Number.isFinite(visionMaxTokens) && visionMaxTokens > 0) {
process.env.SERVER_MAX_TOKENS = String(Math.floor(visionMaxTokens));
}
const visionTemperature = gcfg.get("serverTemperature");
if (typeof visionTemperature === "number" && Number.isFinite(visionTemperature)) {
process.env.SERVER_TEMPERATURE = String(visionTemperature);
}
const qwen3VlModelPath = gcfg.get("qwen3VlModelPath");
if (typeof qwen3VlModelPath === "string") {
process.env.LMSTUDIO_VISION_MODEL_KEY = qwen3VlModelPath;
}
const qwen3VlOdPrompt = gcfg.get("qwen3VlOdPrompt");
if (typeof qwen3VlOdPrompt === "string") {
process.env.DETECT_OD_PROMPT = qwen3VlOdPrompt;
}
const detectMaxTokens = gcfg.get("detectMaxTokens");
if (typeof detectMaxTokens === "number" && Number.isFinite(detectMaxTokens) && detectMaxTokens > 0) {
process.env.DETECT_MAX_TOKENS = String(Math.floor(detectMaxTokens));
}
const detectTemperature = gcfg.get("detectTemperature");
if (typeof detectTemperature === "number" && Number.isFinite(detectTemperature)) {
process.env.DETECT_TEMPERATURE = String(detectTemperature);
}
}
} catch {}
const tools: Tool[] = [];
tools.push(createAnalyseImageTool(ctl));
tools.push(createDetectObjectTool(ctl));
tools.push(createAnnotateImageTool(ctl));
return tools;
}
// src/toolsProvider.ts
import { type Tool, type ToolsProviderController } from "@lmstudio/sdk";
import { createAnnotateImageTool } from "./tools/annotate_image.js";
import { createAnalyseImageTool } from "./tools/analyse_image.js";
import { createDetectObjectTool } from "./tools/detect_object.js";
import { globalConfigSchematics } from "./config.js";
export async function toolsProvider(ctl: ToolsProviderController) {
try {
const getter: any =
(ctl as any).getGlobalPluginConfig || (ctl as any).getGlobalConfig;
const gcfg = getter ? getter.call(ctl, globalConfigSchematics) : null;
if (gcfg) {
const embeddingBaseUrl = gcfg.get("embeddingBaseUrl");
if (typeof embeddingBaseUrl === "string" && embeddingBaseUrl.trim()) {
process.env.LMSTUDIO_VISION_API_BASE_URL = embeddingBaseUrl.trim();
}
const embeddingApiKey = gcfg.get("embeddingApiKey");
if (typeof embeddingApiKey === "string") {
process.env.LMSTUDIO_VISION_API_KEY = embeddingApiKey;
}
const prompt = gcfg.get("visionPrompt");
if (typeof prompt === "string") {
process.env.VISION_PROMPT = prompt;
}
const inclMeta = gcfg.get("includeGenerationMetadata");
if (typeof inclMeta === "boolean") {
process.env.INCLUDE_GENERATION_METADATA = inclMeta ? "true" : "false";
}
const previewInChat = gcfg.get("PREVIEW_IN_CHAT");
if (typeof previewInChat === "boolean") {
process.env.PREVIEW_IN_CHAT = previewInChat ? "true" : "false";
}
const httpPort = gcfg.get("HTTP_SERVER_PORT");
if (typeof httpPort === "number" && Number.isFinite(httpPort) && httpPort > 0) {
process.env.HTTP_SERVER_PORT = String(Math.floor(httpPort));
}
const visionMaxTokens = gcfg.get("serverMaxTokens");
if (typeof visionMaxTokens === "number" && Number.isFinite(visionMaxTokens) && visionMaxTokens > 0) {
process.env.SERVER_MAX_TOKENS = String(Math.floor(visionMaxTokens));
}
const visionTemperature = gcfg.get("serverTemperature");
if (typeof visionTemperature === "number" && Number.isFinite(visionTemperature)) {
process.env.SERVER_TEMPERATURE = String(visionTemperature);
}
const qwen3VlModelPath = gcfg.get("qwen3VlModelPath");
if (typeof qwen3VlModelPath === "string") {
process.env.LMSTUDIO_VISION_MODEL_KEY = qwen3VlModelPath;
}
const qwen3VlOdPrompt = gcfg.get("qwen3VlOdPrompt");
if (typeof qwen3VlOdPrompt === "string") {
process.env.DETECT_OD_PROMPT = qwen3VlOdPrompt;
}
const detectMaxTokens = gcfg.get("detectMaxTokens");
if (typeof detectMaxTokens === "number" && Number.isFinite(detectMaxTokens) && detectMaxTokens > 0) {
process.env.DETECT_MAX_TOKENS = String(Math.floor(detectMaxTokens));
}
const detectTemperature = gcfg.get("detectTemperature");
if (typeof detectTemperature === "number" && Number.isFinite(detectTemperature)) {
process.env.DETECT_TEMPERATURE = String(detectTemperature);
}
}
} catch {}
const tools: Tool[] = [];
tools.push(createAnalyseImageTool(ctl));
tools.push(createDetectObjectTool(ctl));
tools.push(createAnnotateImageTool(ctl));
return tools;
}