@ agentsmarket/ 管道运行时间
执行PIPELINE.md文件——多阶段AI工作流程.
注(第2阶段): 生产执行者居住在
@agentsmarket/server(云雾工人), 运行管道服务器侧POST /v1/pipelines/:id/invoke与出处签名. 这个bin/webhook.mjs此软件包中的 HTTP 服务器是 本地 dev 工具 + 自动托管引用。 。 。 . 在市场外运行管道时使用(例如用于测试,自定义部署, 或发布您的管道到agentsmarket.world) (中文(简体) ).
快开始
import { MiniMaxProvider, runPipeline, runPipelineV2 } from '@agentsmarket/pipeline-runtime';
const provider = new MiniMaxProvider(); // reads MINIMAX_API_KEY env
const pipeline = {
name: 'code-refactor',
version: '1.0.0',
stages: [
{
id: 'analyze',
provider: 'minimax', // R6: explicit provider declaration
model: 'MiniMax-M3',
system: 'You are a code analyzer.',
prompt: 'Analyze this code: {{code}}. List 3 improvement opportunities.',
},
{
id: 'refactor',
provider: 'minimax',
model: 'MiniMax-M3',
depends_on: ['analyze'],
system: 'You are a senior engineer.',
prompt: 'Refactor the code based on: {{analyze}}. Original: {{code}}. Return only the refactored code.',
},
],
};
const result = await runPipeline(pipeline, { code: '...' }, { provider });
console.log(result.refactor);
提供商 ≠型 (R6, v0.3)
从R6开始,每个LLM阶段必须宣布 两者 provider: 财务报告和审定财务报表 model:。 。 。 .
按型号名称自动发送被删除. 见
docs/R6-PROVIDER-MODEL.md 联 合 国
完整设计; 快速参考 :
stages:
- id: analyze
provider: minimax # required — one of openai|anthropic|minimax|openrouter|replicate
model: MiniMax-M3 # required — must be in PROVIDER_REGISTRY[provider].supportedModels
prompt: ...
使用 validateR6Spec(spec) 在无效对上( CLI / 服务器) 失败快取 :
import { validateR6Spec } from '@agentsmarket/pipeline-runtime';
const { errors } = validateR6Spec({
stages: [{ id: 's0', provider: 'replicate', model: 'gpt-4o', prompt: 'x' }],
});
// errors[0]: "Stage 's0': Provider 'replicate' does not support model 'gpt-4o'.
// Supported models for replicate: [...]"
用于自动迁移遗产v.02管道:
import { migrateProviderField } from '@agentsmarket/pipeline-runtime';
const migrated = migrateProviderField(legacySpec); // adds provider: minimax to LLM stages
提供者抽象
管道参考模型按名称排列. 运行时间选择一个知道这个模型的提供者:
minimax— MiniMax( 默认) 。 型号:MiniMax-M3, (中文(简体) ),MiniMax-M2.7, (中文(简体) ),MiniMax-M1。信封:MINIMAX_API_KEY。 。 。 .openai- OpenAI(英语:OpenAI). 型号:gpt-4o, (中文(简体) ),gpt-4o-mini, (中文(简体) ),o1-preview, (中文(简体) ),o1-mini, (中文(简体) ),gpt-3.5-turbo。信封:OPENAI_API_KEY。 。 。 .anthropic- 麻醉药 型号:claude-3-5-sonnet-20241022, (中文(简体) ),claude-3-5-haiku-20241022, (中文(简体) ),claude-3-opus-20240229。信封:ANTHROPIC_API_KEY。 。 。 .openrouter——多模式网关supportedModels: ['*']内容 :OPENROUTER_API_KEY。 。 。 .replicate——再现(影像源). 型号:black-forest-labs/flux-pro, (中文(简体) ),black-forest-labs/flux-schnell, (中文(简体) ),stability-ai/sdxl。信封:REPLICATE_API_TOKEN。 。 。 .
单一真相来源: PROVIDER_REGISTRY 内
src/provider-registry.ts。 。 。 .
状态
v0.5 — 文件输出 + 外壳相运( P5 + P4) 。 服务器表面
call_price_usdc + 键 preferred_model + 键 capabilities 每一个管道.
输出光谱助手(v0.5-P1.1)
管道宣布为顶级 output: 块描述它们生产的东西.
有两个关切: format (文本/json/zip/文件)和 delivery (内出或
已签名 URL). validateOutputSpec(raw) 返回正则的 spec 或
结构错误 :
import { validateOutputSpec } from '@agentsmarket/pipeline-runtime';
const r = validateOutputSpec({
format: 'files',
files: ['*.md', 'report.json'],
delivery: 'signed_url',
expires_in: 3600,
});
// r.ok === true, r.value = { format: 'files', files: [...], delivery: 'signed_url', expires_in: 3600 }
限制 : expires_in 60~秒~604800(7天). 使用球盖 * 财务报告和审定财务报表 **
与标准"没有斜过 **" 语义.
文件输出集(v0.5-P1.2/P5)
当一个舞台宣布 output_format: structured_json 并包括a
produced_files 阵列, extractProducedFiles(stageOutputs, spec) 收藏
基础64编码文件,并对照 output.files 阴影 :
import { extractProducedFiles, globToRegex } from '@agentsmarket/pipeline-runtime';
const stageOutput = JSON.stringify({
summary: 'done',
produced_files: [
{ name: 'report.md', content_type: 'text/markdown', content_b64: 'IyBS...' },
],
});
const r = extractProducedFiles(
{ stage1: stageOutput },
{ format: 'files', files: ['*.md'], delivery: 'signed_url', expires_in: 3600 },
);
// r.files = [{ stage_id: 'stage1', name: 'report.md', size: 7, content_type: 'text/markdown', content_b64: '...' }]
// r.errors = [], r.warnings = []
限制:10 MB/文件,每引用50 MB总量,最多100个文件. 拒绝名称
/, (中文(简体) ), \, (中文(简体) ), .. (平面命名空间). 不良基数64/ 超大小/ 路径- 逆变
返回中止管道的错误; 无法匹配的阴影返回警告.
服务器在 POST /v1/pipelines/:id/invoke (P5) 上传文件到
R2 并返回 HMAC 签名的 URL output_files[]。 。 。 .
壳牌舞台辅助器(v0.5-P4,仅CLI)
阶段可以声明 shell: "cmd args..." 或者说
shell: { cmd, args?, cwd?, timeout_ms? }。只通过
pipeline call --local; 服务器引用返回
400 SHELL_UNSUPPORTED_ON_SERVER。 。 。 .
import { NodeShellExecutor, ThrowingShellExecutor } from '@agentsmarket/pipeline-runtime';
// CLI passes a real executor
const cliDeps = { isLocal: true, shellExecutor: new NodeShellExecutor(), ... };
// Server passes a throwing stub (Workers can't spawn)
const serverDeps = { isLocal: false, shellExecutor: new ThrowingShellExecutor('server cannot spawn'), ... };
NodeShellExecutor 用途 child_process.spawn(cmd, args, { shell: false, timeout })数字 :
签名于 timeout_ms 过期( 地图为 ShellStageTimeoutError),非零
出 关 ShellStageExecError,以每分 1 MB 的速率调取.
两种形式,两种不同的东西:
| 表单 | 这是什么 | 如何运行 |
|---|---|---|
shell: "npm test && npm run lint" | (单位:千美元) 命令行 | /bin/sh -c "npm test && npm run lint" —— 说 &&, (中文(简体) ), |, (中文(简体) ), >, (中文(简体) ), ; 并引用成文作品 |
shell: { cmd: "npm", args: ["test"] } | a 一个 精确参数v | spawn(cmd, args, { shell: false }) ——没有解释,没有重新引用 |
字符串形式是一个真正的外壳,因为舞台叫做 shell: - 一条线
自动分裂成一个正弦 && 普通参数和引用
字义. 翻译一次,在 normalizeShellStage因此,每个
执行器( 本地节点, 远程沙盒) 运行完全相同的 argv 。 对象
窗体保持无外壳: 它是程序必须接收时使用的窗体
正是这些论点.
stages:
- id: lint-and-test
shell: "npm run lint && npm test"
- id: pytest
shell:
cmd: pytest
args: ["-x", "tests/"]
cwd: ./backend
timeout_ms: 120000
限制 : timeout_ms 默认 30000, 最大 60000 (10 分钟) 。 输出上限 1 MB
每个溪流。 字符串窗体在 POSIX 下运行 /bin/sh (单位:千美元)SHELL_BIN) (中文(简体) ).
一次碰撞要知道: ${VAR} 替换为运行时间
在YAML解析前 ${VAR} 内置 a
外壳线由跑道的环境解决——不是由外壳解决. 这是
你想怎样 shell: "curl -H 'Bearer ${API_KEY}' …",但是一个外壳
构造需要 ${...} 本身(一个位置参数, ${1}(中文(简体) )
从来没有到达贝壳.
状态
v0.5 — 文件输出( P5) + shell stage (P4) 运出. R6(提供QQ模式) 运出于v0.3. Linear + DAG 级执行. 重试,平行分枝, 检查站.