@alma-harness/运行时间
正式储存构成,即产生受管制跑道的部署,以及
简单的文字对话外观。 根导出只有类型 。 使用
/deployment 要配置一次, /agent 用于查询和恢复, /memory 或者说
/postgres 低级工厂的先进路线.
配置一次 : /deployment
import { createRuntimeDeployment } from '@alma-harness/runtime/deployment';
const deployment = createRuntimeDeployment({
runtime, clients: { anthropic, openai }, prices, priceVersion,
consumers: ['product'], caps, retentionMs: 60_000,
limits: { deadlineMs: 8_000, runTimeoutMs: 120_000, stepTimeoutMs: 60_000, maxCalls: 24,
maxInputChars: 64_000, maxRequestChars: 1_000_000, maxOutputChars: 100_000 },
onBackgroundError: reportAccountingIssue,
batch: { clients: { openai: openaiBatch }, retentionMs: 7 * 86_400_000 }, // optional
});
const titles = deployment.singleCall({ policy, policyVersion, outputContractVersion, system: [], maxTokens: 64 });
const pick = deployment.structuredCall({ policy, policyVersion, outputContractVersion, system, maxTokens, tools, toolChoice });
const chat = deployment.conversation({ policy, policyVersion, configRevision, resultContractVersion, system, tools,
caps: perTurnCaps, limits: { maxCalls: 8 } });
const extract = deployment.batchCall({ policy, policyVersion, outputContractVersion, configRevision, system, tools, toolChoice,
maxTokens, validate, retries, retryDelayMs, submitWindowMs });
每个工厂都把跑者送回去 createSingleCallRunner, (中文(简体) ),
createStructuredCallRunner, (中文(简体) ), createConversationRunner 或者说
createBatchCallRunner 以相同的价值为基础,并经过验证,
绑定和回放(规格:运行时间-部署,部署-批量-呼叫).
-
部署时拥有: 运行时间的商店和审计日志,
clients, (中文(简体) ),prices, (中文(简体) ),priceVersion, (中文(简体) ),consumers,结果保留和a 谈话step行动通过其中任何一个,即使undefined掷出TypeError。 。 。 . -
每项行动可超过:
caps替换整个,limits合并字段 字段,以及onBackgroundError替换. -
所需限制, 不默认 : 单一和结构化呼叫需求
deadlineMs, (中文(简体) ),maxInputChars财务报告和审定财务报表maxOutputChars。需要对话runTimeoutMs, (中文(简体) ),stepTimeoutMs, (中文(简体) ),maxCalls, (中文(简体) ),maxInputChars, (中文(简体) ),maxRequestChars财务报告和审定财务报表maxOutputChars。 。 。 . -
抓图 : 价格、上限、限制、消费者、客户和商店地图 在建筑中复制。 部署没有游泳池.
-
批量通话 :
- 他们需要
runtime.stores.batch和部署batch.clients· ; - 他们拿
runTimeoutMs, (中文(简体) ),maxRequestChars财务报告和审定财务报表maxOutputChars内部 批量跑跑者自己的最大分数; - 其结果用于
batch.retentionMs,默认为 保留部署; - 观察者收到尝试的批次密钥
operationKey· ; /deployment需求@alma-harness/batch已安装.
一个主机从自己的组装中移动待处理的批次,只保留在 计划、提供者账户和有效的配置(见 (原始内容存档于2018-10-21). spec.
- 他们需要
-
已解析值 :
deployment.resolved每个跑者resolved拿着 保留量及其所建限制,冻结(请说明: (a) 部署-解析值. -
版本保留您的版本 : 凸起
policyVersion, (中文(简体) ),priceVersion, (中文(简体) ),outputContractVersion, (中文(简体) ),configRevision或者说inputRevision当他们是什么 名称更改。 配置修改涵盖所有执行行为, 包括模型、政策、提示、工具、钩子、上下文来源、生成 控制、价格、上限、限额、重审、合同和供应商账户。 这个 只留下改变行为、资源身份或 授权,例如数据库登录或在一个账户中旋转的密钥. 在修改冲突下重试现有执行,所以 约束它们会阻碍待完成的工作.
开始并恢复对话 : /agent
import { createConversationAgent } from '@alma-harness/runtime/agent';
const agent = createConversationAgent({
id: 'assistant', revision: 'v1', runtime,
model: { ref: model, client, prices },
instructions: 'You are a helpful assistant.',
intent: { tier: 'standard', sensitivity: 'personal' },
limits: { caps: { perTurnUsd: 0.25 }, retentionMs: 60_000 },
onBackgroundError: reportAccountingIssue, // audit defaults to runtime.stores.audit
});
const user = agent.forUser({ org, uid }); // verified by the host
const first = await user.query({ prompt: 'Hello', messageId: 'delivery-1' });
if (first.view.status === 'completed')
await user.query({ resume: first.sessionId, prompt: 'Continue', messageId: 'delivery-2' });
const observed = await user.read({ sessionId: first.sessionId, messageId: 'delivery-1' });
见 快速启动。 。 。 .
- 一个不可改变的修订 覆盖整个配置, 信任 包括能力.
- 版本默认值 : 120个超时,24个电话,64000个输入字符, 100万个请求字符和10万个输出字符.
resume选择约束范围内的现有历史。 不详或 外国会话抛出ConversationResumeError。主机授权 会话: id不是证书.- 第一届会议 来源于代理人、范围和
messageId(单位:千美元)conversationAgentSessionId) (中文(简体) ). 要重试丢失的响应, 请重复一次 请求. - 每个查询返回
{ sessionId, messageId, rootKey, view }检查view.status在使用结果之前.read从来没有发送. - 表面所没有的: 它不添加输入队列、重试、调度器或 清除障碍.
明显的跑腿组成
import { createMemoryRuntime } from '@alma-harness/runtime/memory';
import { createConversationRunner } from '@alma-harness/conversation';
const runtime = createMemoryRuntime({ stepResultPolicy: policy, rootResultPolicy: policy });
const runner = createConversationRunner({ ...hostConfig, ...runtime.stores, step: { ...hostConfig.step, ...runtime.stores.step } });
记忆是麻风:重启会失去历史,接纳和回放保护.
close() 永不抹去存储或调和不确定的工作.
邮递SQL : /postgres
import { createPostgresRuntime, migratePostgresRuntime } from '@alma-harness/runtime/postgres';
const namespace = { schema: 'agent_execution', rootSchema: 'agent_results', onPoolError: report };
await migratePostgresRuntime({ ...namespace, connectionString: migrationURL }); // migration principal, outside requests
const runtime = createPostgresRuntime({ ...namespace, connectionString: runtimeURL,
poolMax: { execution: 2, roots: 1 }, stepResultPolicy: policy, rootResultPolicy: policy });
- 两个专门的计划 使用不同的小写名称。 连接 URL
启动
options拒绝. - 移徙 安装适配器, 授予 USAGE 计划
alma_app财务报告和审定财务报表alma_retention,并撤销CREATE。 它从未授予登录会员资格 : 操作员给出运行时间登录alma_app没有超级用户, BYPASSRLS或所有权。 它可以重复,而不是原子跨越计划: 失败, 修复原因并重跑 . - 升级窗口 : 上次由前两个数据库之一迁移的数据库 小型释放物移入原地。 更古老的升级步骤(请参见: 升级窗口).
- 游泳池 : 建筑开通无连接. 两个有界池,五个
默认连接, 由
poolMax: { execution, roots }B. 预算instances × (execution + roots + batch)加迁移、维持和a 以数据库容量计的储备. - 批量存储 :
batch: { schema, resultPolicy, poolMax? }打开第三个 池,默认连接5个,并构建runtime.stores.batch编号 存储安装的策略batch财务报告和审定财务报表results传出计划stores移徙和核查. - 连接 :
connection: { applicationName, idleTimeoutMs }(规格: 池连接 - 选项).applicationName1至40个字符的标签[A-Za-z0-9_.:-]每个池连接为<label>:execution, (中文(简体) ),:roots财务报告和审定财务报表:batch这样pg_stat_activity告诉他们分开。 没有标签的阿尔玛 未设置名称, 而 URL 或PGAPPNAME适用。 URL 旁边的标签 携带application_name被拒绝.idleTimeoutMs设定闲置连接的开放时间: 1,000 到 60万,默认为一万.- 保持活动 : 每个游泳池都能保持TCP的活性 当第一个探测器 外出是操作系统的设置.
onPoolError(error, schema)需要同步。 报告 闲置客户失败且不能丢弃.runtime.stores.audit写入执行名称空间, 请在 执行池.- 保留和清除: 记录会话,结果存储和
stores.batch.results在东道主审计的留存和去除。 A 类reconciliation_required转会的会话在返回前解开 主机决定是否再次发送( spec: 失败- turn- release) .
正在验证数据库
import { checkPostgresRuntime, verifyPostgresRuntime } from '@alma-harness/runtime/postgres';
const logins = [{ name: 'api', role: 'alma_app' }, { name: 'maintenance_discovery', role: 'alma_maintenance' }];
const report = await verifyPostgresRuntime({ connectionString: migrationURL, schema, rootSchema, logins }); // deploy job
if (!report.ok) throw new Error(JSON.stringify(report.differences));
await checkPostgresRuntime({ connectionString: runtimeURL, schema, rootSchema, logins }); // startup, read-only
verifyPostgresRuntime 用阴影来比对部署的对子
版本在总是回滚的交易中迁移。 它需要没有
显示或快照(规格:运行时间核查、核查-开发-命令、,
(b) 储存核查).
- 它所执行的是:
- Alma的角色是NOLOGIN,成员没有角色;
- 每个列出的登录都完全达到其作用;
- (一) 不向行动者或公众提供默认赠款,无论是全球赠款还是覆盖计划赠款; 在覆盖的计划中,或从移徙到全球的其他角色 校长;
- 没有不信任的事件触发、发布或外部
SECURITY DEFINER常规; - 发现角色的柱花上限;
- 移民不能给任何人任何好处;
- 没有改写规则或继承边缘;
- 没有SET
session_replication_role。 。 。 .
- 信托 指纹(
trustedRoutines, (中文(简体) ),trustedPublications, (中文(简体) ),trustedEventTriggers) (中文(简体) ). - 报告 携带散货车
diagnostics: true显示已绑定的文字),以及 上限为500个差异. - 一个干净的跑 从一个快照到
alma_runtime_verification。 。 。 .
checkPostgresRuntime 将每个变化无常的都作为运行时间登录.
然后把现场目录和文摘作比较 然后扔
RuntimeVerificationError (单位:千美元)invariant, (中文(简体) ), unverified, (中文(简体) ), version 或者说 drift) (中文(简体) ).
角色是全组的:在Alma中增加一个成员的另一个产品是:
漂移直到你再次核实。 需要 PostgreSQL 16 或稍后时间 .
储存计划. 传出同样的 stores 列表,例如
[{ schema: 'agent_memory', install: ['memory', 'audit'] }]对移民,
核查和支票.
- 类型 :
memory, (中文(简体) ),audit, (中文(简体) ),routines, (中文(简体) ),routineRuns, (中文(简体) ),batch财务报告和审定财务报表results多达8个专门计划. - 已验证的全文 : 一个商店计划只持有它的类型迁移 创建.
- 常规 :
routines添加alma_scheduler到检查的角色.
设定范围
import { createPostgresScopeFence } from '@alma-harness/runtime/postgres';
const fences = createPostgresScopeFence({ ...namespace, connectionString: runtimeURL, stores });
const { status, record } = await fences.fence(scope, { actionId: 'erase-42', actor: 'privacy-desk' });
await fences.close();
栅栏是永久性的:没有API将其抬起(规格:范围-栅栏). 一次 fence
阿尔马萨诸塞州 阿尔马萨诸塞州
为内容保留位置,没有写入范围的内容
任何地方(谱系:瞄准镜-射纹).
- 拒绝
ScopeFencedError(单位:千美元)@alma-harness/execution页:1 无内容 :- 新的转弯和新的单一、结构化或分批调用键;
- 每个新结果保留。 一份浓缩报告
reconciliation_required而不写任何计划; - 一个会话附件、一个记忆插曲或事实、一个例行登记和一个 常规运行记录 .
- 仍在服役: 阅读、重放存储的密钥、维护恢复和 使用确认.
- 飞行中: b. 已经提出主张和保留的工作
发送并存储结果。 栅栏回来前的转弯
reconciliation_required在它的下一步或附件。 在 PostgreSQL 上,一个新的 键,在仍然使用答案的会话中busy。栅栏会擦去 无: 下一个删除瞄准镜 . - 地点: 这对夫妇的行刑名称空间 掌握着卡通记录,
复制到根命名空间和每个商店安装的图案
batch, (中文(简体) ),results, (中文(简体) ),memory, (中文(简体) ),routines或者说routineRuns。第一个记录获胜;a 待会fence返回为existing。只解决fence证明每个 计划有栅栏,所以重试失败者,在任何actionId。计划 单打独斗 另有记录fence拒绝并命名它,因为 调和的操作员.get只读对相. - 不是对东道主的守护: 门拒绝插入。 一个作家 编辑阿尔玛一行,作为应用程序登录在主机权威上的行为.
- 连接 : 连接为应用程序登录。 最多一个连接, 没有在建筑.
- 内存 :
createMemoryRuntime曝光情况runtime.stores.fences,哪个 打开自己的商店. - 升级 : 栅栏桌和大门 更改已核实的目录,所以
启动检查报告漂移到再次核实。 栅栏在之后
移徙,核实完整
stores列表,启动每个进程 在这个版本, 退休每一个老作家.
缩小范围
import { createPostgresScopeErasure } from '@alma-harness/runtime/postgres';
const erasure = createPostgresScopeErasure({ ...namespace, connectionString: runtimeURL, stores,
batchClients: (configRevision, provider) => batchClientFor(configRevision, provider) });
const report = await erasure.erase(scope, { actionId: 'erase-42', actor: 'privacy-desk' });
if (report.status === 'pending') retryAfter(report.waitingUntil); // then call erase again
await erasure.close();
一通电话就抹去一对店主的名声 和每个被宣布的商店计划
(规格:范围-鉴赏). 传出同样的 stores 列表为迁移和
核查。 每个电话:
- 围栏 范围,并保持现有的围栏及其记录;
- 删除内容 : 会话、标签(密封)、步骤、根、批和存储 成果(通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通;
- 关闭待完成的工作 :
running财务报告和审定财务报表submitted常规运行变为failed与原因scope erased,每跑会失去它的手柄和任何其他原因;- 不确定的承认 释放与栅栏
actionId作为 决议,最多100个呼吁。 不需要操作员登录: 栅栏 授权;
- 在提供者丢弃瞄准镜的批次 (规格:
提供- 批- 保留).
batchClients返回账户的客户端 使用的配置修改,或undefined。取消运行的批次 并保持开放,直到稍后的呼叫删除它。 仍在飞行中的呈文 没有手柄,在提交期限之前一直保持开放waitingUntil· ; - 证明 内容:
report.tables列出每个工程表及其rows, (中文(简体) ), 页:1open仍然保留内容或未关闭的工作的行,以及为什么其他的 实值kept(单位:千美元)tombstone, (中文(简体) ),closed, (中文(简体) ),journal, (中文(简体) ),accounting, (中文(简体) ),audit, (中文(简体) ),fence) (中文(简体) ).report.provider给瞄准镜的批次和没有 已确认删除.status实值erased仅当每个open为 0.
-
待定: 读取
tables[].open为事业. 以前允许的转弯 栅栏和仍在期限之内waitingUntil; 再次打电话 后结. 超过100个不确定的招生者又接到了电话. 内容 呼叫后仍开行 是调查的不一致 而不是等待. -
复试 : 每一个步骤都是自己做的,而且具有独断专行的能力。 一个失败的呼叫 写入后抛出
scope:failed到对子的审计线索; 下一个 调用完成它。 每个电话都写scope:erased或者说scope:pending。 。 。 . -
飞行中: 两者都不相符合.
- 一个在消除后读到保留 停止没有
使者否认它,而日记记录它
not_dispatched。 。 。 . - 已经过去一个字了 可能仍然根据索赔要求发出
在栅栏前 以一个
unavailable及其结果 费用入账.
- 一个在消除后读到保留 停止没有
使者否认它,而日记记录它
-
留下来的是: 标识符、数量、使用量、时间和散列,从未 阿尔玛写了短信 两个主机作者的字符串只保留在附件上 审计线索:路线政策
rationale和访问事件resource。选择假名标识符,并保留用户文本 都一样. -
未计数 : 光标和投影光标,光标只有 房客日的开销没有
uid。 。 。 . -
连接 : 连接为应用程序登录。 在电话中,最多 每一个它碰到的图案都有一个连接;没有在呼叫之间.
-
供应商批次: 每通电话再次询问提供者,一次检索和 每个 OpenAI 批次最多三次删除,所以重试确认没有留下任何内容. 请求被节制或失败,其批次就会开放。 供货商保存的 不论:
- openAI 批件对象,带有识别符、计数和错误消息;
- (a) 接收丢失的批次,直至失效(OpenAI)或29天 (雅典语);
- 提示缓存和日志 .
藏品收藏前取消的批次,可以开出帐单,不录入.
-
范围外: 并保留年长者的权利要求 部署,主机用它去除
createMemoryErasure({ turns })。 。 。 .
维修: /maintenance
import { createPostgresMaintenance } from '@alma-harness/runtime/maintenance';
const maintenance = createPostgresMaintenance({ schema, rootSchema, stepResultPolicy, rootResultPolicy, onPoolError,
discovery: { connectionString: discoveryURL }, worker: { connectionString: workerURL } });
const report = await maintenance.maintain({ limit: 50, signal }); // schedule it
maintain 找到有适当工作的瞄准镜并进行扫描,至少最近才访问过
第一( 光谱: 运行时间维护) :
- 死刑的收监、执行和处决过期;
- 根据保留的结果完成处决;
- 它承认使用.
它从未发出过通知,它的报告只是重要的。 执行完毕
一旦收回,可以收回:过了收回的租约,或者过了期限。 A 类
已补全的呼叫缺失其根收件通过待用行找到
(规格:维护-扫描). 扫描指数和发现角色
recovery_until 授权更改已核实的目录: 之后再次核实
移徙.
登录 :
- (单位:千美元) 发现 登录
alma_maintenance只见有鉴证者, 跨范围的国家和时间; - (单位:千美元) 劳动者 登录
alma_app只是,这不是请求路径.
也不可能进去 alma_retention每一个电话都检查这个.
连接 : 每例最多3起:2起关于发现登录和
一个工人连接,它也服务于每个呼叫的登录检查(规格:
保持连接-预算,登录-检查-连接). connection 拿着
和运行时间一样 工人的游泳池和发现池
连接为 <label>:maintenance:execution, (中文(简体) ), :roots 财务报告和审定财务报表 :discovery。 。 。 .
收款预测: /projections
import { createPostgresProjections } from '@alma-harness/runtime/projections';
const projections = createPostgresProjections({ schema, rootSchema, stepResultPolicy, rootResultPolicy, onPoolError,
discovery: { connectionString: projectionURL }, worker: { connectionString: workerURL } });
await projections.drain('cost-dashboard', async delivery => { /* dedupe on (scope, consumer, settlementId) */ }, { limit: 50 });
await projections.quiesce(scope, () => erasure.erase(scope, request), { timeoutMs: 30_000 });
drain 向每个受管制的消费者交付
会话归属 : available, (中文(简体) ), erased 或者说 none (规格:
(b) 收款-预测).
- 致谢: 只有在处理人之后才确认收据 决心,所以把分解 和效果一起.
- 交付 : 公平,永远不要丢失收据.
- 登录 : 发现登录
alma_projection只有工人登录 内alma_app只有维修费. - 连接 :
connection维修费,名字列在下<label>:projections:。 。 。 . - 厄拉苏:
quiesce等待一个排水管 工作范围,然后运行你的 当然 存储标签的目的地必须用擦去的序列 如图所示,通过大门行.
预测只耗尽了对子的处决命名空间.
对话操作 : /operations
createConversationOperations 检查,修理并解决一个承认,
拥有主机补给的能力。 这个 alma-operations CLI从
jSON在Stdin上与一个本地 --host 模块。 见
操作员运行本。 。 。 .
一个电话的日记是 not_dispatched 从未离开,并计及
没有成本,所以它不再阻断分辨率(spec: never-sent-calls).
转弯时 inspect 显示
turn-failed-v1:,以及 resolve 答题 binding_conflict (规格:
失败的回合释放).
一个 operation_failed 数据库出错导致的 SQLSTATE 载入
error.sqlstate,CLI打印出来: {"error":"operation_failed","sqlstate":"42501"}。 。 。 .
没有关于该错误的信息、细节或查询留下(谱号:不定-回合-原因).
runtime.stores.labels 是会话标签存储( spec: session- lables) 。 线
以至被清除 createMemoryErasure({ sessionLabels })。 。 。 .