API 列表

August 15, 2026 · View on GitHub

本插件 API 的权威参考(版本 0.1.0,源码 src/)。README 为用户导向的精简版;两者冲突以本文件为准。 类型信息以构建产物 lib/*.d.ts 为准;本文档为人工维护的概要(含源码行号,随代码演进可能漂移)。

1. 插件入口(src/index.ts

1.1 Cordis 插件契约

导出类型说明
namestring'unsloth-tool'(src/index.ts:34)
injectstring[]['tools'](src/index.ts:35)
Configz<Config>schemastery schema(见 1.2;src/index.ts:116)
apply(ctx, config)(ctx: Context, config: Config) => void插件入口(src/index.ts:210)

1.2 Config(插件配置;也作为 llm-unsloth: settings 段 schema)

本插件是纯客户端:不启动/不停止任何进程,只连接用户已运行的 Unsloth Desktop。配置只有连接与调用事实:

字段类型默认说明
baseURLstringhttp://127.0.0.1:8888Unsloth Desktop 端点;/v1/chat/completions 被追加
modelstringunsloth发送给服务器的 wire model id(真实服务器接受任意值;真机验证过)
apiKeystring—(或 $UNSLOTH_API_KEYUnsloth API key(sk-unsloth-…,Settings → API 创建;只显示一次)
toolNamestringunsloth_run文本工具名
toolDescriptionstring内置覆盖文本工具描述
enableVisionToolbooleantrue是否注册视觉工具
visionToolNamestringunsloth_vision视觉工具名
visionToolDescriptionstring内置覆盖视觉工具描述
timeoutMsnumber120000单次本地模型调用预算(ms)
maxTokensnumber8192请求默认输出上限(tokens)

1.3 resolveOptions(config, environment?)(src/index.ts:150)

(config: Config, environment?: LaunchEnvironmentSnapshot) => ResolvedOptions

配置的唯一显式解析步骤:验证 baseURL/端口/工具名/数值边界,合并环境变量(UNSLOTH_API_KEY,src/index.ts:192)。失败抛 Error(fail loud,符合 config.md 规范)。

1.4 ResolvedOptions

baseURL: string
model: string
apiKey?: string
toolName: string
toolDescription: string
enableVisionTool: boolean
visionToolName: string
visionToolDescription: string
timeoutMs: number
maxTokens: number

2. 工具(模型可见 API)

2.1 unsloth_run — 文本工具

参数

参数类型必填说明
promptstring发给本地模型的指令/文本(user 消息)
systemstring系统指令
temperaturenumber采样温度 0–2
max_tokensinteger输出上限(默认 maxTokens
stopstring[]停止序列

返回值(canonical value)

{
  text: string            // 模型原始文本输出
  reasoning?: string      // 思考文本(模型输出时,来自 reasoning_content)
  model: string           // 服务器报告的模型 id
  usage: { promptTokens: integer, completionTokens: integer }
  elapsedMs: integer
}

rendertext + 脚注 (ran on local <model> · <in> in / <out> out tokens · <ms>ms)

2.2 unsloth_vision — 多模态/OCR 工具

参数

参数类型必填说明
mode'analyze'|'ocr'|'compare'内置提示词模板(默认 analyze
promptstring自定义指令(覆盖模板)
image_pathsstring[]本地图片绝对路径(png/jpg/jpeg/webp/gif/bmp,≤20 MB/张)
image_urlsstring[]data:image/...http(s):// URL
temperaturenumber采样温度(OCR 建议 ~0.2)
max_tokensinteger输出上限
stopstring[]停止序列

图片来源解析顺序image_paths + image_urls(合并)→ 会话内附件(最近的图像,经 ctx.attachments.readImage)→ 失败(isError + 清晰消息)。

返回值:同 2.1 加 images: integer(处理的图片数)。

提示词模板mode 对应 src/prompts.ts 的三个内置模板(analyze = 8 段 # Image Analysis Reportocr = 逐字提取;compare = 5 段 # Image Comparison Report),完整文本见 §6。

视觉能力要求 Unsloth 当前加载的模型是多模态的;文本模型上调用会得到 EMPTY_RESPONSE(见 solutions.md §6)。

3. 可达性探测(src/unsloth.ts

导出签名说明
probeServer(baseURL: string, apiKey?: string, probeTimeoutMs?: number) => Promise<void>(src/unsloth.ts:135)探测 GET /v1/models(带 key 时附加 Bearer 头);任何 HTTP 应答 = 可达(401 仅说明 key 缺失/错误,交给调用报 AUTH);无应答抛 LlmError('SERVER_NOT_RUNNING') 且带可操作提示

每次工具调用前执行一次探测,让"Unsloth Desktop 没运行"得到清晰错误而不是笼统的网络失败。设计动机见 solutions.md §1

4. 客户端(src/unsloth.ts

导出签名说明
chatCompletion(baseURL: string, request: ChatCompletionRequest) => Promise<ChatCompletion>(src/unsloth.ts:173)非流式 /v1/chat/completions;带 key 时附加 Authorization: Bearer <key>;多模态时发送 OpenAI content 数组
httpErrorCode(status: number, error?: {message?; type?; code?}) => UnslothErrorCode(src/unsloth.ts:116)HTTP 状态 → 稳定错误码
portOf(baseURL: string) => number(src/unsloth.ts:36)从 baseURL 解析端口;缺省 8888

ChatCompletionRequest

model: string
apiKey?: string            // sk-unsloth-…;缺省不带头
system?: string
prompt: string
images?: string[]          // data:image/... URL;存在时 prompt+images 组成 content 数组
temperature?: number
maxTokens?: number
stop?: string[]
signal: AbortSignal        // 必须;内部合并超时

ChatCompletion{ text, reasoning?, model, usage: { promptTokens, completionTokens } }

UnslothErrorCodeSERVER_NOT_RUNNING | TIMEOUT | ABORTED | TRANSPORT | AUTH | QUOTA | RATE_LIMIT | CONTEXT_WINDOW_EXCEEDED | INVALID_REQUEST | SERVER | EMPTY_RESPONSE | HTTP_<n>

错误语义(抛 LlmError,code 稳定):

code触发提示
SERVER_NOT_RUNNINGprobeServer 无应答(Unsloth Desktop 未运行 / baseURL 错误)"start Unsloth Desktop, load a model, and check baseURL"
TRANSPORT网络失败(DNS/拒绝连接/TLS)
ABORTED调用方取消
TIMEOUTAbortSignal.timeout 到期
AUTH401/403(key 缺失、错误或已吊销)"check the Unsloth API key (Settings → API …)"
RATE_LIMIT429
CONTEXT_WINDOW_EXCEEDED400 + 上下文溢出措辞/context_length_exceeded
INVALID_REQUEST400 其他
QUOTA配额措辞
SERVER / HTTP_<n>≥500 / 其他状态
EMPTY_RESPONSE模型空输出(文本模型接视觉请求属预期,见 §2.2 附注)

5. 图像准备(src/images.ts

导出签名说明
MAX_IMAGE_BYTESconst20 * 1024 * 1024
mimeOf(path: string) => string | undefined扩展名 → MIME
isSupportedImagePath(path: string) => boolean格式支持判断
imageFileToDataUrl(path: string, signal?: AbortSignal) => Promise<string>本地文件 → data URL(校验存在/大小/格式)
imageUrlToDataUrl(url: string, signal: AbortSignal) => Promise<string>data: 透传;http(s) 下载转 data URL
collectSessionImageDataUrls(ctx: Context, exec: VisionExecContext) => Promise<string[]>会话内图片(最新优先,去重;无 attachment 服务时返回空)

6. 提示词模板(src/prompts.ts

导出说明
VisionMode'analyze' | 'ocr' | 'compare'
ANALYZE_PROMPT / OCR_PROMPT / COMPARE_PROMPT内置模板(8 段 / 逐字 / 5 段)
VISION_FIDELITY_RULEfidelity 规则文本(模型转发视觉输出时必须逐字保留)
resolveVisionPrompt(mode: VisionMode, prompt?: string) => string(自定义优先)

7. 其他导出

  • VisionExecContext(类型):{ signal: AbortSignal; agent?: { session: { events: readonly unknown[] } } }
  • ChatCompletionRequest / ChatCompletion / UnslothErrorCode / WireContentPart(类型,见 §4)
  • CONTEXT_WINDOW_EXCEEDED_CODE(字符串常量,透传自 @deepseek-ai/dsh-llm

8. 环境变量

变量用途优先级
UNSLOTH_API_KEYapiKey 兜底settings > cordis config > 环境变量

9. 包级规范(package.json)

规范来源
main / types / exports["."]lib/index.js / lib/index.d.ts(真实产物,见 solutions.md §7adding-a-package.md
dsh.bundle.patch./cordis.patch.ymlpublish.md
fileslibsrccordis.patch.yml、README、LICENSEpublish.md / adding-a-package.md
scriptsclean/build/prepare/typecheck/test/prepublishOnly(无任何安装/卸载钩子)publish.md(git 安装需 prepare
peerDependencies@deepseek-ai/cordis ^4.0.1dsh-* >=0.1.0-rc.2schemastery ^3.18.1adding-a-package.md(镜像到 devDependencies)