@civitai / agent-runner
的服务器端 <civitai-chat>的远程模式。该页不再在页面中运行辅助回复,而是在运行器上启动运行,通过SSE跟踪其事件,并可以停止运行。如果页面关闭或重新加载,则继续运行。这个包就是那个跑步者:
- 每个回复运行为 DBOS Postgres上的工作流。当进程崩溃时,应答从其最后保存的进度中恢复,无论哪个副本恢复它。
- 它服务于聊天的运行程序协议v1 (
@civitai/components-chat/runner-protocol)通过HTTP:启动,查找,停止,通过幂等键停止,修补对话,并从任何偏移读取运行的事件。 - 查看器一次只能运行一个活动。
Civitai自己的跑步助手就是基于它开发的。该软件包对Civitai的账户、代币或型号一无所知。部署通过几个接口提供这些功能。
安装
pnpm add @civitai/agent-runner @civitai/components-chat
@civitai/components-chat 是对等依赖,因为页面和运行程序必须使用相同的协议。您需要Node 22或更高版本,以及DBOS可以使用的Postgres数据库。
部署提供了什么
跑步者从外部需要的一切都通过内部接口 interfaces.ts:
| 接口 | 它是做什么的 |
|---|---|
Authenticator | 将请求的标头转换为它所代表的用户id。 |
GrantVerifier | 检查运行是否允许启动或补丁携带(报头) x-run-grant)。 |
GrantStore | 在运行有效期间保持运行的授权,在您自己的表中,而不是在DBOS中。 |
ConversationStore | 加载并自动更新保存的会话,即聊天的v2/v3元数据。 |
ModelProvider | 提供回复使用的语言模型。一个真实的服务器根据每次请求生成它的凭据。 |
ToolProvider | 打开回复工具。跑步者在停止或回复结束时关闭它们。 |
跑步者从不向模型,工具或商店接缝提供凭证。任何传递到DBOS工作流或从步骤返回的内容都将在Postgres中持久化,因此令牌永远不能作为参数或返回值跨越这些接缝。
Run grants必须说明它们是什么
一、 RunGrant 携带必要的 preview 国旗:
preview: false是跑步补助金。这是一个很好的开始或补丁。preview: true是预演补助金。只有在需要一辆车的路线上才有用grantFor(request, conversationId, undefined, true).- 没有布尔值的授权
preview既不。它在任何地方都被拒绝,并且运行API记录拒绝。Runner.start在保留赠款之前,还会拒绝除运行赠款以外的任何内容。
规则关闭失败,因此忘记标志的验证器不能让其预览授权开始运行。
草图
import { buildRunApp, loggerOptions, Runner } from '@civitai/agent-runner';
const runner = new Runner({
models, // ModelProvider
tools, // ToolProvider
store, // ConversationStore
grants: grantStore, // GrantStore
log,
wallClockMs: 10 * 60 * 1000,
stopGraceMs: 20_000,
});
const app = buildRunApp({
service: runner,
authenticator, // Authenticator
grants: grantVerifier, // GrantVerifier
logger: loggerOptions('info'), // never logs request headers
});
runner.register(); // once per process, before launch
await runner.launch({ databaseUrl, executorId: 'replica-1', workerConcurrency: 8 });
await app.listen({ port: 8080, host: '0.0.0.0' });
buildRunApp 也需要 routes,用于在运行API旁边提供部署自己的路由。他们得到的是一样的 authed, grantFor 和 refuse 运行API使用的helper。它还需要 patchRefusal 和 basePath.
持久的名称:不要随意更改
重新启动的进程恢复的运行将根据DBOS为其记录的内容重播。工作流名称(reply, reply-stop-marker)、排队(replies)、应用程式版本(WORKFLOW_VERSION, reply-1),日志流(events)和回电的顺序因此是合同的一部分。 test/reply-dbos-calls.pg.test.ts 从DBOS自己的表中读取它们,并将它们与黄金记录进行比较。该记录与运行程序移动到此包之前验证的记录字节相同。如果你改变了其中任何一个,bump WORKFLOW_VERSION 随着变化。
@dbos-inc/dbos-sdk 因为同样的原因被固定在一个完全相同的版本上。
测试支持
@civitai/agent-runner/test-support 导出套件使用的组件:脚本化模型、组件工具、承载身份验证器、文件支持的对话存储、SSE读取器,以及 freshDatabase 对于一次性Postgres数据库(它读为 ASSISTANT_RUNNER_TEST_DATABASE_URL)。
开发
pnpm --filter @civitai/agent-runner typecheck
pnpm --filter @civitai/agent-runner build
套件在CI中运行,在 agent-runner job,针对Postgres服务。在CI之外,postgresql支持的套件会跳过unless ASSISTANT_RUNNER_TEST_DATABASE_URL 指向可以在其中创建和删除数据库的服务器。在CI中,丢失的URL会使套件失败,而不是跳过它。 test/core-boundary.test.ts 失败的时候 src/ 从外部导入文件,或导入一个包 package.json 不申报。
许可证
麻省理工学院