Rivet Actors RunnerConfigKind 枚举详解:normal 与 serverless 两种运行模式的配置模型

发布时间:2026/9/18 12:22:06

Rivet Actors RunnerConfigKind 枚举详解:normal 与 serverless 两种运行模式的配置模型 Rivet Actors RunnerConfigKind 枚举详解normal 与 serverless 两种运行模式的配置模型【免费下载链接】actorsRivet Actors are the primitive for stateful workloads. Built for AI agents, collaborative apps, and durable execution.项目地址: https://gitcode.com/GitHub_Trending/riv/actors本文聚焦 Rivet Actors SDKRust中由 OpenAPI 生成的模型RunnerConfigKind完整解析其两个枚举变体RunnerConfigKindOneOfnormal 模式与RunnerConfigKindOneOf1serverless 模式的字段语义、JSON 序列化形态并结合后端版本化迁移源码namespace_runner_config.rs说明该枚举在配置演进中的真实作用。读完本文你将掌握 Runner 配置的完整字段表、两种模式的核心差异以及如何在实际代码中构造与解析该配置。背景RunnerConfigKind 在模型体系中的位置RunnerConfigKind是rivet-api-publicRivet Actors 公共 APIRust SDK 中描述Runner 运行配置类型的枚举模型源码位于 engine/sdks/rust/api-full/rust/src/models/runner_config_kind.rs。它与RunnerConfig、RunnerConfigResponse等模型共同组成 API 对 Actor 运行器Runner配置的完整描述。从 API 参考文档 engine/sdks/rust/api-full/rust/docs/RunnerConfigKind.md 可以看到该枚举只有两个变体NameDescriptionRunnerConfigKindOneOfRunnerConfigKindOneOf1文档本身是 OpenAPI Generator 自动生成的模型参考描述为空但其含义需要结合相邻模型文档与实现源码才能完整还原。它的本质是一个未标记枚举untagged enum——即一个字段既可以承载 normal 模式配置、也可以承载 serverless 模式配置的判别联合discriminated union。这也对应了 Rivet 的general-runtime-modes概念一个命名空间下的 Runner 可以选择常驻normal或Serverless两种运行形态。枚举定义untagged 联合与默认变体#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[serde(untagged)] pub enum RunnerConfigKind { RunnerConfigKindOneOf(Boxmodels::RunnerConfigKindOneOf), RunnerConfigKindOneOf1(Boxmodels::RunnerConfigKindOneOf1), } impl Default for RunnerConfigKind { fn default() - Self { Self::RunnerConfigKindOneOf(Default::default()) } }关键实现细节engine/sdks/rust/api-full/rust/src/models/runner_config_kind.rs#[serde(untagged)]意味着不带任何外部标签直接内联序列化变体内容。反序列化时 serde 依次尝试每个变体直到某个变体成功解析为止。Default实现指向RunnerConfigKindOneOf即当用户不显式选择时默认采用 normal 模式语义。两个变体分别包装了RunnerConfigKindOneOf与RunnerConfigKindOneOf1这两个结构体各自只有一个字段充当命名空间包装器。两种变体的内部结构RunnerConfigKindOneOfnormal 模式对应文档 engine/sdks/rust/api-full/rust/docs/RunnerConfigKindOneOf.md源码在 engine/sdks/rust/api-full/rust/src/models/runner_config_kind_one_of.rspub struct RunnerConfigKindOneOf { #[serde(rename normal)] pub normal: Boxmodels::RunnerConfigKindOneOfNormal, }它只包含一个normal字段指向 RunnerConfigKindOneOfNormal。JSON 形态为{ normal: { ... } }。RunnerConfigKindOneOf1serverless 模式对应文档 engine/sdks/rust/api-full/rust/docs/RunnerConfigKindOneOf1.md源码在 engine/sdks/rust/api-full/rust/src/models/runner_config_kind_one_of_1.rspub struct RunnerConfigKindOneOf1 { #[serde(rename serverless)] pub serverless: Boxmodels::RunnerConfigKindOneOf1Serverless, }它只包含一个serverless字段指向 RunnerConfigKindOneOf1Serverless。JSON 形态为{ serverless: { ... } }。由于RunnerConfigKind是 untagged 枚举序列化时{ normal: ... }会被识别为RunnerConfigKindOneOf{ serverless: ... }会被识别为RunnerConfigKindOneOf1从而通过字段名即标签的方式实现了模式判别。字段详解normal 模式配置RunnerConfigKindOneOfNormalRunnerConfigKindOneOfNormal源码engine/sdks/rust/api-full/rust/src/models/runner_config_kind_one_of_normal.rs定义了常驻模式下与Actor 驱逐eviction相关的三个速率控制参数以及版本升级时的排空开关字段类型单位说明actor_eviction_delayOptioni32秒驱逐延迟时间actor_eviction_periodOptioni32秒驱逐周期actor_eviction_rateOptionf32每秒 Actor 数驱逐速率上限drain_on_version_upgradeOptionbool—版本升级时是否先排空再升级这些字段控制着平台在资源压力下回收空闲 Actor 的行为actor_eviction_period决定了驱逐检查的间隔actor_eviction_rate限制了单位时间内的驱逐数量避免雪崩actor_eviction_delay则给 Actor 一段宽限期再执行回收。所有字段均声明为OptionOptionT通过serde_with::rust::double_option用于区分字段缺失与显式 null两种状态。字段详解serverless 模式配置RunnerConfigKindOneOf1Serverlessserverless 模式是字段最丰富的变体见 RunnerConfigKindOneOf1Serverless源码engine/sdks/rust/api-full/rust/src/models/runner_config_kind_one_of_1_serverless.rs字段类型单位说明request_lifespani32必填秒单个请求的最长生命周期到达后请求结束urlString必填—serverless 服务的入口地址actor_eviction_delayOptioni32秒驱逐延迟时间actor_eviction_periodOptioni32秒驱逐周期actor_eviction_rateOptionf32每秒 Actor 数驱逐速率上限drain_grace_periodOptioni32秒排空宽限期drain_on_version_upgradeOptionbool—版本升级时是否先排空headersOptionHashMapString, String—附加请求头max_concurrent_actorsOptioni64—最大并发 Actor 数metadata_poll_intervalOptioni64毫秒元数据轮询间隔未设置时使用全局默认值max_runnersOptioni32—已弃用min_runnersOptioni32—已弃用runners_marginOptioni32—已弃用slots_per_runnerOptioni32—已弃用值得注意的几点request_lifespan与url是必填字段构造器RunnerConfigKindOneOf1Serverless::new(request_lifespan, url)也印证了这一点见源码第 57 行。max_runners、min_runners、runners_margin、slots_per_runner四个字段在文档中标注为Deprecated其能力已被max_concurrent_actors取代——这一演进在后端迁移代码中有明确体现。headers允许为 serverless 目标注入自定义请求头适合鉴权或路由场景。RunnerConfig两种模式的顶层组合RunnerConfigKind通常不会单独出现而是作为 RunnerConfig 的组成部分被使用。RunnerConfig源码engine/sdks/rust/api-full/rust/src/models/runner_config.rs将两种模式同时以必填字段列出pub struct RunnerConfig { #[serde(rename normal)] pub normal: Boxmodels::RunnerConfigKindOneOfNormal, #[serde(rename serverless)] pub serverless: Boxmodels::RunnerConfigKindOneOf1Serverless, /// Deprecated. #[serde(rename drain_on_version_upgrade, default, ...)] pub drain_on_version_upgrade: OptionOptionbool, #[serde(rename metadata, ...)] pub metadata: OptionOptionserde_json::Value, }这种两个模式都出现、运行时择一使用的设计让配置对象可以在不同命名空间/环境中复用normal 与 serverless 的配置并存于同一个RunnerConfig中平台根据实际运行的运行模式选择对应字段。此外drain_on_version_upgrade在RunnerConfig层标记为Deprecated该开关已被下沉到各模式内部。metadata是一个自由格式的serde_json::Value用于携带自定义元数据。响应侧模型 RunnerConfigResponse 在RunnerConfig基础上额外增加了protocol_version协议版本与runner_pool_error运行池错误信息两个字段用于 API 回传时附带运行时状态。后端佐证配置版本的迁移链v1 → v5在服务端实现中Runner 配置同样是按版本演进的。位于 engine/sdks/rust/data/src/versioned/namespace_runner_config.rs 的迁移代码展示了RunnerConfigKind从 v1 到 v5 的完整演进过程可以从源码结构推断出以下关键事实v1 仅支持 serverless 模式v1到v2的迁移中v1配置被整体包进RunnerConfigKind::Serverless而反向迁移时遇到RunnerConfigKind::Normal会直接bail!(namespace runner config v1 does not support normal runner config)——也就是说 normal 模式是后续版本才引入的。字段演进路径清晰v2→v3 迁移保留url、headers、request_lifespan、slots_per_runner、min_runners、max_runners、runners_margin等字段到 v4→v5 迁移时max_runners as u64被映射为max_concurrent_actors与 SDK 中弃用max_runners、引入max_concurrent_actors的字段标注完全吻合。Normal 变体在 v2 之后持续存在从 v2 到 v5 的所有版本都定义了RunnerConfigKind::Normal与RunnerConfigKind::Serverless(serverless)两个变体与 SDK 中RunnerConfigKind枚举的两个变体一一对应。这段迁移链从实现层面证实了RunnerConfigKind的 two-variant 设计不仅存在于 API 模型层也是服务端命名空间配置的持久化形态SDK 文档中的 Deprecated 标注与后端迁移逻辑保持一致。序列化形态与使用要点由于#[serde(untagged)]RunnerConfigKind在 JSON 中不携带任何枚举标签直接表现为嵌套对象// 变体 1normal 模式 { normal: { actor_eviction_rate: 5.0, actor_eviction_period: 60, drain_on_version_upgrade: true } } // 变体 2serverless 模式 { serverless: { url: https://worker.example.com/handle, request_lifespan: 30, max_concurrent_actors: 100, headers: { Authorization: Bearer xxx } } }使用时的几个要点构造时通过RunnerConfigKind::RunnerConfigKindOneOf(Box::new(...))显式包装Default默认取 normal 变体。反序列化依赖字段名判别normal/serverless字段必须出现否则对应的 untagged 变体匹配失败。必填字段注意serverless 变体的url与request_lifespan缺失会导致该变体解析失败此时 untagged 枚举会回退尝试其他变体。可选字段的三态语义OptionOptionTdouble option区分JSON 中未出现None与JSON 中显式为 nullSome(None)在平台侧两者处理策略不同。弃用字段避免使用max_runners、min_runners、runners_margin、slots_per_runner请改用max_concurrent_actors。小结RunnerConfigKind虽然是一份由 OpenAPI 自动生成的简短枚举文档但它精确刻画了 Rivet Actors 的核心运行模型两个变体分别对应normal常驻与serverless按需两种运行模式通过untagged 联合 字段名判别实现无标签的多态序列化字段设计围绕Actor 驱逐控制actor_eviction_*与版本升级排空drain_on_version_upgrade两大主题serverless 模式额外包含url、request_lifespan、headers、max_concurrent_actors等运行时参数服务端namespace_runner_config.rs的 v1→v5 迁移链验证了该枚举的演进历史与 Deprecated 标注的准确性。对于需要以 Rust 方式操作 Rivet Actors 命名空间配置的开发者本文的字段表与源码引用路径模型定义、normal 字段、serverless 字段、后端迁移可作为直接查阅与联调的依据。【免费下载链接】actorsRivet Actors are the primitive for stateful workloads. Built for AI agents, collaborative apps, and durable execution.项目地址: https://gitcode.com/GitHub_Trending/riv/actors创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/18 12:17:06

别找临时中转:用 TaoToken 给 OpenCode 做兼容通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 12:17:06

内网离线部署Qwen3:Docker+vLLM实战流程

1. 项目概述:为什么内网离线部署Qwen3必须用DockervLLM组合我去年在一家做工业智能质检的客户现场,接手过一个典型的“三无”AI项目:无外网、无GPU集群管理平台、无专职运维。客户产线边缘服务器只有两台A100 40G单卡机器,要求把Q…

2026/9/18 12:17:06

Codex 的 Base URL 填 TaoToken,通义千问 Qwen2 在编辑器中直接跑通

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 15:37:27

OpenManus 拆解贪吃蛇任务计划,Base URL 填 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 15:37:27

冷库监控系统flask框架机器学习模型计算机毕业设计项目

冷库监控系统是一个集成了现代传感器技术、数据采集与传输技术以及Web开发框架的综合系统,旨在实现对冷库环境参数的实时监控、数据管理和可视化展示。该系统通过部署在冷库内的各类传感器,实时采集温度、湿度、二氧化碳浓度、压力和氧气含量等关键环境参…

2026/9/18 15:37:27

开源知识库问答,TaoToken 的 Key 别写进前端

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 15:37:27

面向教育的在线课程管理系统设计与实现

摘 要在教育信息化加速推进的当下,传统教学课程管理模式在效率与精准度上的短板日益凸显。人工处理教学事务耗时费力,数据管理分散且易出错,难以满足现代教育对高效、智能管理的需求。在此背景下,开发先进的在线课程管理系统系统…

2026/9/18 15:37:27

多模态记忆检索用 MemoraX AI 时,TaoToken 的 Key 放在哪

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 15:32:27

MOSFET驱动电路设计核心参数:从米勒平台到栅极电阻

1. 为什么手册参数看得懂,驱动波形还是翻车做电源和电机驱动这些年,我见过太多"手册参数门儿清、一上示波器就傻眼"的场面。同事拿着数据手册来找我:"这管子Qg才40nC,按公式算开关时间绰绰有余,为什么栅…

2026/9/18 14:13:01

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/18 0:01:09

Google Colab 实战:运行模型、数据加载与报错排查

1. 为什么我劝你先搞懂 Colab 的运行模型1.1 Colab 到底是什么,跟本地跑代码差在哪Google Colab 简单说就是一台跑在浏览器里的 Linux 虚拟机,你打开一个 Notebook,背后就连上了一台带 GPU 的远程机器。你在单元格里敲的每一行 Python&#x…

2026/9/18 0:01:09

C语言数据类型与表达式详解

1. C语言数据与数据类型概述在C语言编程中,数据是程序处理的核心对象。理解数据的分类和特性是掌握C语言的基础。C语言中的数据主要分为四大类:常量、变量、表达式和函数。这些数据类型构成了C语言程序的基本元素,每种类型都有其独特的特性和…

2026/9/18 0:01:09

SQL时间字段指定时间段查询:区间语义、索引与时区避坑

上周排查一个线上问题&#xff0c;用户反馈"昨天的订单一条都没查到"&#xff0c;但数据库里明明躺着两千多条。最后定位下来&#xff0c;不是数据丢了&#xff0c;也不是接口挂了&#xff0c;而是那个查询条件把时间段写成了> 2024-05-20 00:00:00 AND < 2024…

2026/9/18 14:13:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/18 14:13:02

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/18 14:13:02

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码