@ computesdk/ 发音
计算SDK的Promigence提供商 - AI代理产品级沙盒,有文件系统和流出输出.
承诺 在沙盒里运行AI代理 和他们的密码, 每个人从一个快照 并运行在一个支出上限。 你用测试命令绘制的快照 只有在测试通过之后才会被存储 使用此软件包, 代码为 computesdk 运行在Promigence沙盒.
安装
npm install @computesdk/promigence
它需要节点.js 20或后.
设置
与普罗密会CLI签约. 它在这个机器上存储一个 API 密钥,当没有通过或设定时,提供者使用该密钥 :
npm install -g promigence
promigence signup # or `promigence login` for an account you already have
在服务器或CI中,在环境中设置密钥:
export PROMIGENCE_API_KEY=prom_api_...
| 环境变量 | 含义 |
|---|---|
PROMIGENCE_API_KEY | 您的 API 密钥, 当 apiKey 未通过 |
PROMIGENCE_SPEND_CAP | 可选:最多一个沙盒可以花,美元,当 spendCap 未通过。 未设置, 您所在组织的默认上限适用 |
PROMIGENCE_API_URL | 可选 : 要使用的 API, 当 apiUrl 未通过 |
快速启动
import { compute } from 'computesdk';
import { promigence } from '@computesdk/promigence';
compute.setConfig({
provider: promigence({ apiKey: process.env.PROMIGENCE_API_KEY }),
});
const sandbox = await compute.instances.create();
const result = await sandbox.runCommand(`python3 - <<'PY'
print("Hello from Promigence")
PY`);
console.log(result.stdout);
await sandbox.filesystem.writeFile('/tmp/hello.txt', 'hello');
console.log(await sandbox.filesystem.readFile('/tmp/hello.txt'));
await sandbox.destroy();
您也可以直接给提供者打电话:
import { promigence } from '@computesdk/promigence';
const provider = promigence({}); // PROMIGENCE_API_KEY, or the key the CLI stored
const sandbox = await provider.instances.create({ templateId: 'my-app' }); // a snapshot you built, by its alias
配置
配置选项
interface PromigenceConfig {
/** Promigence API key - if not provided, uses PROMIGENCE_API_KEY, then the key `promigence login` stored */
apiKey?: string;
/** Promigence API URL - if not provided, uses PROMIGENCE_API_URL, then the default Promigence API */
apiUrl?: string;
/** The most one sandbox may spend, in US dollars - if not provided, uses PROMIGENCE_SPEND_CAP, then your organization's default cap */
spendCap?: number;
/** The snapshot create() starts from when it names none (id, alias or alias@commit); default: the built-in base snapshot */
snapshot?: string;
/** Sandbox lifetime in milliseconds when create() sets none; also the bound on a command that sets none */
timeout?: number;
/** Size of a sandbox created from an image: 'xsmall', 'small', 'medium', 'large', 'xlarge' or '2xlarge' */
tier?: string;
/** 'start' (the default) or 'compute' (long, memory-heavy jobs on the larger tiers) */
optimizeFor?: 'start' | 'compute';
/** A client from @promigence/sdk to use instead of one built from apiKey and apiUrl */
client?: PromigenceClient;
}
供应商在发送任何信息前检查这个配置. 缺失的密钥,或错误的URL,花出上限或超时,是一个说要修复的东西的错误.
create() 选项
| 选项 | 它会做什么 |
|---|---|
templateId 编号 : snapshotId | 从头开始的快照:其id,其别名, alias@commit,或Promigence模板的名称(promigence templates (列入清单) |
image | 容器图像而不是快照: 标签, 如 python:3.12,或 name@sha256:...。第一个 create() 从一个图像构建它的快照,每秒在它构建时计费;后来的则重新使用它. 与不同时 templateId 编号 : snapshotId |
tier, (中文(简体) ), registrySecret | 与 image: 沙盒大小,以及持有登记证书的存储机密的名称 |
timeout | 沙盒寿命以毫秒计 |
envs | 每个命令通过此沙盒运行的环境变量 |
metadata | 沙盒上的标签( 非字符串的值被存储为 JSON) |
allowInternetAccess: false | 没有网络访问 |
allowHosts: [...] | 只有这些目的地才能到达 |
spendCap, (中文(简体) ), optimizeFor | 覆盖此沙盒的提供者配置 |
runtime, (中文(简体) ), name,CPU和内存字段 | 被忽略: 一个沙盒有它的快照大小 |
特征
图标 cwd, (中文(简体) ), env, (中文(简体) ), timeout 财务报告和审定财务报表 background,而一个退出非零的返回 作为其正常结果 exitCode。通过 onStdout 或者说 onStderr 而输出在命令运行时到达。 一个超过它的命令 timeout 以124号出口码停止和报告.
文件系统 API 读取,写入,列表并删除文件,创建目录并检查路径是否存在. 沙盒被管理 create, (中文(简体) ), getById, (中文(简体) ), list (每个沙盒没有结束)和 destroy; 快照为 snapshot.create(sandboxId), (中文(简体) ), snapshot.list() 财务报告和审定财务报表 snapshot.delete(id)每个沙盒都有一个支出上限:你的, PROMIGENCE_SPEND_CAP,或者你的组织违约.
支持的运行时间
内置的地基快照与Python,Node.js和Go相伴而来,外加git和常见的地基活化工具. 任何容器图像通过 image。所以,任何快照 你与Promigence CLI,通过 templateId。 。 。 .
(原始内容存档于2018-03-21) (英语). The Promigence SDK understand
sandbox.getInstance() 返回时 { sandbox, client, config }页:1 Sandbox 从 @promigence/sdk,它使用的客户端和提供者配置。 当您需要SDK在计算SDK接口之外提供的东西时,请联系它 类型脚本 SDK 文件 说说看.
处理错误
一个Promigence错误随着操作命名被重新推出. 它保留了SDK的 code 财务报告和审定财务报表 fix (下一步要做什么)和原始错误为 cause; 每一个代码在 缩写.ai/docs/errors。 。 。 .
try {
await promigence({}).instances.create();
} catch (error) {
const { code, fix } = error as { code?: string; fix?: string };
console.error(code, fix); // for example: auth, and how to pass a key
}
虽然 fallbackOnError 将永居其中, compute.instances.create() 将每个配置提供者的失败合并为一个错误。 过 fallbackOnError: false 改为 compute.setConfig() 以接收 Promigence 错误.
限制
- 还没有预览 URL, 所以
getUrl()掷出. 要到达沙盒中的服务器,请从同一沙盒中的指令中调用,例如:curl。 。 。 . snapshot.create(sandboxId)抓取运行中的沙盒的快照, 它会继续运行; 从它开始新的沙盒create({ snapshotId })保存整个沙盒,包括内存:任何地方的文件(/tmp财务报告和审定财务报表/dev/shm以及它正在运行的程序。 只有命令开始于runCommand(cmd, { background: true })都结束了.sandbox.pause()停止计费并释放容量,直到sandbox.resume(),使沙盒恢复原样:文件、内存和运行过程。 开始命令{ background: true }结束于暂停.- 这里的模板是快照。 这个
template方法抛出,以及templateId打开create()命名一个快照. runCommand(cmd, { background: true })立即使用退出代码 0 回答,而不收集命令的输出.- CPU 和内存字段
create()被忽略。 一个沙盒有它的快照大小tier为创建于image。 。 。 . - 传递到
create()应用通过它返回的沙盒运行的命令。 一个手柄来自getById()或者说list()没有,所以通过env与每个命令在那里.
支助
读取 准确文件 编辑 错误代码,或写入 支持@ promigence.ai。计算SDK本身的问题将转到 计算SDK问题。 。 。 .
许可证
麻省理工学院