@basenative/station

中文文档
3.0.0发布于 2026/10/31Apache-2.0TypeScriptES Module零依赖构建来源已验证

队列驱动的本地推理原语——驱动带有sqlite支持的作业队列、迭代循环运行时、回退到Workers AI和可重用的作业模板的cloudflare隧道vLLM塔(或任何openai兼容的端点)。

中文使用文档
文档目录16 节
  1. 什么站
  2. 它与前沿推断有何不同
  3. 何时使用车站
  4. 安装
  5. 快速启动
  6. API
  7. defineStation(opts)
  8. Client / OpenAICompatClient
  9. Queue
  10. Runner
  11. templates
  12. ops
  13. 命令行界面
  14. Ops环路
  15. Worker-runtime支持
  16. 许可证

@basenative /站

队列驱动的本地推理原语——驱动带有sqlite支持的作业队列、迭代循环运行时、自动Workers AI回退和预构建作业模板注册表的cloudflare隧道vLLM塔(或任何openai兼容的端点)。

部分 BaseNative 生态系统。指定的 DUGANLABS_ORCHESTRATOR_SPEC.md §9。

什么站

一种小型的、固执己见的用于运行的软件原语 循环模式 针对a的工作负载 本地7b级编码器模型 在openai兼容的HTTP端点后面(在我们的参考堆栈中:通过vLLM提供Qwen2.5-Coder-7B INT4的RTX 5070盒子,暴露在cloudflare隧道上)。

它是 不 塔的硬件。驱动这座塔的是软件。

它与前沿推断有何不同

规范 § 9中的成本模型,重述:

层每代币边际成本小说代码的质量质量循环模式代码
边疆 (十四行诗4.6 /作品4.7)公布的人为率优秀的优秀-浪费了
工人人工智能 (gpt-oss-120b免费层)每天释放多达10K个神经元好良好的上限吞吐量
车站 (本地7B INT4)高于电费0美元 (约5-10美元/月)可怜的一次性在狭窄的模板化迭代上可以接受

空塔:~20W × 24h × 0.30美元/kWh × 30d≈ 4.30美元/月. 突发推断:5-10美元/月。 十四行诗-相当于docstring覆盖范围的5k站迭代: ~ 15-25美元。

收支平衡大约是5万代币/天。 最重要的是,车站在成本上获胜。在它下面,只需使用十四行诗。

何时使用车站

将工作站用于以下任务:

  • 每次迭代的赌注很低。
  • 模板很窄,成功检查是确定性的。
  • 您将经常这样做(≥数百次迭代)。

具体的适合:

  • 为一个TODO写一个测试一下,标记完成,提前。
  • 将一个JSDoc添加到一个未记录的导出。
  • 修复一个绒毛警告。
  • 在一个文件中应用一个mechanical重构步骤。
  • 将一条入站短信分类为一个FSM过渡(Greenput摄入量)。

不要 将Station用于:计划器任务(Opus),新颖的实现代码(Sonnet), PR审查(Opus),或任何涉及基本公理的内容(仅限边界-漂移是不可恢复的)。

安装

pnpm add @basenative/station
# Optional, for production persistence:
pnpm add better-sqlite3

快速启动

import { defineStation } from '@basenative/station';

const station = defineStation({
  tunnelUrl: 'https://tower.your-account.cloudflareaccess.com',
  model: 'qwen2.5-coder-7b-instruct',
  queueDb: '/var/lib/dugan/station.db',
  fallback: {
    url: 'https://api.cloudflare.com/client/v4/accounts/<id>/ai/run',
    model: 'gpt-oss-120b',
  },
});

// Enqueue a job
const id = station.queue.enqueue({
  venture: 'basenative',
  intent: 'docstring-coverage',
  payload: {
    filePath: 'packages/runtime/src/signal.js',
    fileContents: '/* ... */',
    exportName: 'createSignal',
    exportKind: 'function',
  },
});

// Drain the queue (runs all queued jobs to completion or escalation)
const counters = await station.runner.run({ maxJobs: 50 });
console.log(counters);
// { processed: 50, completed: 47, escalated: 2, failed: 1 }

API

defineStation(opts)

返回 { client, queue, runner, templates }。如果您想以不同的方式连接它们 (例如,从Worker排队,从节点守护进程运行),这四个部分也会单独导出。

Client / OpenAICompatClient

import { OpenAICompatClient } from '@basenative/station';

const client = new OpenAICompatClient({
  baseUrl: 'https://tower.example.com',
  model: 'qwen2.5-coder-7b-instruct',
  fallbackUrl: 'https://api.cloudflare.com/.../ai/run',
});

const { text, latencyMs, source } = await client.chat({
  messages: [{ role: 'user', content: 'Write one JSDoc for foo.' }],
  temperature: 0.2,
  maxTokens: 400,
});
// source === 'primary' | 'fallback'

回退行为: 每一个 chat() 调用首先到达主节点。对于任何失败(HTTP错误、格式错误的响应、超时),它都会在回退上重试。如果两者都失败,则抛出 StationUnavailable 附加了两个错误链。 30秒硬超时 每一个电话。

Queue

SQLite-schema-compatible(见 src/queue.js 对于DDL)。默认驱动程序在内存中; 通过 betterSqlite3 来 createQueue 对于持久性:

import Database from 'better-sqlite3';
import { createQueue } from '@basenative/station';
const queue = createQueue({ path: './station.db', betterSqlite3: Database });

API: enqueue, claim, recordIteration, complete, escalate, fail, list, iterationsFor, depth.

Runner

循环运行时。每次迭代它:

  1. 通过查找作业的模板 intent.
  2. 通过创建提示符 template.buildPrompt(payload).
  3. 调用模型。
  4. (消费者钩子) 在沙盒工作树中应用响应作为差异。
  5. 跑步 template.successCheck(diff, payload).
  6. 记录迭代; 前进或停止。

失速阈值 maxIterations 每份工作; escalateTo 是编排器在作业停止时应将其路由到的上游层。

templates

预构建的冻结注册表。每个模板都有 name, description, buildPrompt, successCheck, maxIterations, escalateTo。包括的五个模板是:

  • tests-from-todos
  • docstring-coverage
  • lint-bankruptcy
  • refactor-migration
  • fsm-classifier

你可以自己加一个 defineStation({ ..., templates: { ...templates, mine } }).

ops

由orchestrator的消耗的运行状况检查助手 station-ops 代理:

  • tunnelHealth(url) ——得到 /health
  • modelHealth(client) - - - - - - GET /v1/models,验证了所提出的预期模型
  • gpuHealth(url) -可选GET /gpu 探头(有根的;塔侧端点待定)
  • queueHealth(queue) -深度最老-排队年龄
  • summary({ tunnelUrl, client, queue, gpuUrl }) ——复合

命令行界面

bn-station enqueue <intent> [--venture x] [--payload @file.json]
bn-station list    [--status queued|running|done|escalated|failed]
bn-station run     [--max-iterations N] [--max-jobs N]
bn-station ops
bn-station drain

从读取配置 STATION_TUNNEL_URL, STATION_MODEL, STATION_QUEUE_DB, STATION_FALLBACK_URL.

Ops环路

预期的部署形状,根据规范§5.5:

  1. 运行cron / systemd定时器 bn-station ops 每60s在dispatcher主机上。
  2. 在 tunnel.ok === false,station-ops代理将队列的有效回退翻转到Workers AI,发布到TUI,并写入事件。
  3. 在 queue.oldestQueuedAgeMs > 1h,按其升级最旧的排队作业 escalateTo 政策。
  4. 在电源/ISP中断时,所有飞行中的作业都将升级并显示给用户。

Worker-runtime支持

Client 和 templates 是纯粹的 fetch 纯函数,并在Cloudflare Workers中未经修改地运行。默认的 Queue 驱动程序在内存中(Worker没有文件系统)-如果你需要在Worker中持久排队,在更高的层中持久化到D1/KV并调用 enqueue/claim 从那里。

Runner 是可移植的,并在节点或工作线程中运行。

许可证

apache - 2.0。

版本与发布记录

@basenative/station 共发布 11 个版本,首次发布于 2026/10/18;过去 12 个月发布了 11 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.0.0latest2026/10/312 天前
2.4.02026/10/268 天前
2.3.22026/10/2212 天前
2.3.12026/10/2212 天前
2.3.02026/10/2212 天前
2.2.02026/10/2113 天前

关于 @basenative/station 的常见问题

@basenative/station 是什么?

队列驱动的本地推理原语——驱动带有sqlite支持的作业队列、迭代循环运行时、回退到Workers AI和可重用的作业模板的cloudflare隧道vLLM塔(或任何openai兼容的端点)。

如何安装 @basenative/station?

在项目目录运行 npm install @basenative/station,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 bn-station,可以用 npx bn-station 直接运行。

@basenative/station 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@basenative/station 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@basenative/station 可以商用吗?

@basenative/station 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@basenative/station 还在维护吗?

最新版本 3.0.0 发布于 2026/10/31(2 天前);至今共发布 11 个版本,其中过去 12 个月发布了 11 个;首次发布于 2026/10/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。