// Name: LM Studio Proofread // Description: Проверяет орфографию и пунктуацию с помощью локальной модели LM Studio. // Author: l0xNeSS // GitHub: l0xNeSS import "@johnlindquist/kit" const endpoint = process.env.LM_STUDIO_API_URL || "http://localhost:1234/v1/chat/completions" const model = process.env.LM_STUDIO_MODEL || "local-llm" let text = (await getSelectedText())?.trim() if (!text) { const clip = (await paste())?.trim() if (clip) { const choice = await arg("Использовать текст для проверки", [ { name: "Использовать выделенный/буфер обмена", description: clip.slice(0, 120), value: "clip" }, { name: "Ввести/вставить вручную", value: "manual" }, ]) if (choice === "clip") text = clip } } if (!text) { text = await editor({ hint: "Вставьте или введите текст для проверки", placeholder: "Текст для проверки орфографии и пунктуации...", value: "", }) text = text.trim() } if (!text) { await notify("Нет текста для проверки") exit() } const systemPrompt = "Ты редактор русского и английского языков. Исправляй орфографию и пунктуацию, сохраняя стиль, смысл и форматирование. Возвращай только исправленный текст, без пояснений." let corrected = "" try { const { data } = await post(endpoint, { model, temperature: 0, messages: [ { role: "system", content: systemPrompt }, { role: "user", content: text }, ], }, { headers: { "Content-Type": "application/json" }, }) corrected = data?.choices?.[0]?.message?.content?.toString()?.trim() || "" } catch (err) { await div(md(` ## Не удалось обратиться к LM Studio Убедитесь, что: - LM Studio запущен - Включён локальный сервер API (обычно http://localhost:1234) - Загружена и активна модель Текущий endpoint: ${endpoint} Модель: ${model} `)) exit() } if (!corrected) { await notify("Модель не вернула результат") exit() } await copy(corrected) const hadSelection = Boolean((await getSelectedText())?.length) if (hadSelection) { try { await setSelectedText(corrected, true) await toast("Исправленный текст вставлен и скопирован в буфер обмена") exit() } catch { // Fallback to editor } } await editor({ value: corrected, hint: "Исправленный текст скопирован в буфер обмена", })