OceanWayOceanWay

调度、执行与模型网关池

OceanWay 控制面、文本网关池与媒体网关池的正式边界、执行协议、计费和迁移方案

调度、执行与模型网关池

本页是 OceanWay 模型执行链路的主规范。它回答五个问题:公开产品在哪里,用户和钱包在哪里,文本与媒体请求如何分流,长时媒体任务由谁恢复,以及供应成本和用户计费如何保持独立。管理员如何跨这些边界诊断、告警和处置,见管理员平台与运维控制面

正式决策

OceanWay 正式采用“中心控制面 + 同级双网关池”,而不是网关层层嵌套:

边界正式定位唯一负责明确不负责
OceanWay Core / Execution Edge客户、产品和业务执行控制面用户、企业、子账号、Developer Access Domain、商品目录、Surface、Run、钱包、账单、正式资产ProviderCredentialVersion、物理渠道选择
Text Gateway PoolUUMI/new-api 组成的私有文本网关池文本、Embedding、Rerank 等协议适配、物理 Channel、流式传输、Token Usage 和供应成本客户产品目录、用户售价、钱包、正式资产
Media Gateway Pooloceanway-media-gateway 组成的私有媒体网关池图片/视频 Provider 接入、Supply、ProviderCredentialVersion、媒体 Task、Provider Attempt、轮询恢复、结果归一化和供应成本本地 User/CustomerGroup/APIKey 服务、模型广场、用户售价、钱包、正式资产

以下结论不再作为待决策项:

  1. ai.oceanway.tech 只承载无需登录的公开开发者中心,包括公开模型目录、文档、API 列表价、状态和进入控制台的入口;它不承载 App、密钥、用量、购买或账单管理。
  2. 登录后的 Developer Control 固定在 console.oceanway.tech/ai,管理 Developer App、Environment、Service Account、DeveloperCredential、Webhook 和仅 API 用量;钱包、购买、订阅、账单和跨产品总览继续使用 Console 的统一商业与资源界面。
  3. api.oceanway.tech/v1 是独立的唯一公共机器入口,只接受 DeveloperCredential 或由 Console BFF 持有的短期 Playground Execution Grant,不接受 Customer Session 或门户页面请求。
  4. UUMI/new-api 收敛为 Text Gateway Pool;它不再位于目标媒体执行主链路中。
  5. oceanway-media-gateway 是一个完整服务边界,直接连接图片和视频 Provider。
  6. Media Gateway 内的 API、Registry、Dispatcher、Provider Adapter、Poller、Reconciler 和 Result Handling 是同一代码库与所有权边界内的模块,不是需要独立建设的四套平台。
  7. Text Pool 与 Media Pool 同级,互不级联,也不允许在运行中静默跨池降级。

最重要的产品边界

Media Gateway 后续不再提供,也不复制以下客户与商业能力:

  • 任何本地 User/Customer 账号服务,包括本地管理员账号库;
  • 客户组、用户分组或面向客户的渠道分组;
  • API Key 的签发、自助管理、配额或客户鉴权服务;
  • 面向客户的模型广场或模型商城;
  • 用户售价、折扣、套餐、余额、订阅、订单和发票;
  • OceanWay Workspace、Project、Canvas、Agent 或 MCP 的权限模型。

这些能力全部属于 OceanWay 共享核心域。Developer Access Domain 统一拥有 Developer App → Environment → Service Account → DeveloperCredential;其登录后控制面位于 console.oceanway.tech/ai。公开模型、文档和列表价由 ai.oceanway.tech 只读呈现,购买与账务由 Console 统一承载。Media Gateway 只验证 OceanWay Workload Principal 使用的短期 Workload Credential;内部运维使用 OceanWay 集中 SSO/RBAC 或基础设施 IAM,不落成本地用户。DeveloperCredential 只在 api.oceanway.tech/v1 的 Public API Edge 完成鉴权,绝不下发或转发到 Media Gateway。

Media Gateway 可以保留内部的 Provider 模型映射、Supply、Provider Account、ProviderCredentialVersion、能力约束、健康度、容量、路由策略和供应成本。它们是“内部供应目录”,不是 OceanWay 的公开模型商品。

目标拓扑

从产品表面看,公开发现、登录后管理和机器执行是三个明确入口;真正的模型执行统一进入 OceanWay Execution Edge。从基础设施看只有两个并列的私有网关边界。用户、浏览器、Developer App 和产品工作台都不能直接调用任一私有网关。

当前基线与目标状态

当前 pic-vps 上的 UUMI/new-api 已经承担实际模型接入,历史媒体调用可能仍经过该链路。这个事实应作为迁移基线记录,但不能再被描述为目标媒体架构。

oceanway-media-gateway 已具备媒体供应、版本化凭据、持久 Task/Attempt、路由快照、Dispatcher、Poller、Reconciler 和结果处理基础。目标不是再在它前后建设一套重复的 Adapter、Job Registry 或 Channel Layer,而是将其作为 Media Gateway Pool 的直接实现接入 OceanWay。

迁移期间允许旧媒体任务继续沿 UUMI/new-api 原路运行到终态;新的媒体模型按 Offering 逐个切换到 Media Gateway。不得在同一个 Attempt 中双写两个网关,也不得把已提交任务迁移到新网关。

三层调度职责

OceanWay Product Control

负责“卖什么、给谁看、按什么规则使用”:

  • Logical Model、Model Offering 和稳定公开模型 ID;
  • webapiinternal 等 Surface;
  • 能力、生命周期、协议、区域和数据策略;
  • 面向用户的价格、套餐、折扣与合同;
  • 企业、Workspace、Project、角色和预算;
  • Offering 到执行池及内部 Backend Model 的受控映射。

codex-auto-review 一类模型可以只发布到 internal,因此不会进入网页或开发者公共目录。大量文本模型进入 API 时,也只会按 OceanWay 的能力、Family 和 Variant 组织,而不会把供应商原始 ID 平铺给用户。

OceanWay Execution Control

负责“一次业务调用应该怎样被可靠执行”:

  • 创建 Run、Step、Execution Attempt 和 Output;
  • 鉴权、配额、并发、预算预占与幂等;
  • 根据冻结的 Offering Revision 选择 Text 或 Media Pool;
  • 保存 gatewayDeploymentIdgatewayTaskId
  • 接收或查询终态、登记正式资产;
  • 结算、释放、退款与待对账;
  • 业务重试、用户取消意图、SSE 和客户 Webhook。

Private Gateway Execution

两个网关池分别负责自己的物理供应执行:

  • Text Gateway 固定真实 Channel、Provider Model 和协议,返回流式内容、Usage 与供应成本。
  • Media Gateway 固定 Supply、ProviderCredentialVersion、Provider Adapter 和请求快照,持久化媒体 Task 与 Provider Attempt,恢复长任务并报告结果和供应成本。

私有网关不得基于 OceanWay 用户余额或零售价改变路由,也不得自行创建 OceanWay Run、Asset 或账本记录。

模型目录与路由映射

模型目录分为公开商品和内部供应两套视图,但只有 OceanWay 是公开事实源:

OceanWay Model Offering
  publicModelId
  capability
  surfaces[]
  lifecycle
  protocol
  retailPricingSku
  executionPool = text | media
  backendModelId

Text Gateway Supply
  backendModelId
  channel / provider model / credential
  capability evidence / health / provider cost

Media Gateway Supply
  backendModelId
  supply / provider model / credential version
  adapter capability / health / capacity / provider cost

同步或手工录入的 Provider Model 只形成未发布 Observation。OceanWay 管理员完成能力、协议、价格、安全和可用性审核后,才能发布为 Offering。

Media Gateway 中即使保留 PublicModel 或类似对象,也只能把它解释为内部稳定路由别名。它不得形成第二个公开模型广场,也不得自行决定模型在哪个 OceanWay Surface 出现。

统一执行清单

每次 Run 开始前,OceanWay 固定不可变 Execution Manifest:

actorPrincipalId / executionPrincipalId / authenticationType
organizationId / workspaceId / projectId
developerAppId? / environmentId? / serviceAccountId?
developerCredentialId? / playgroundExecutionGrantId?(Public API 严格二选一)
requestId / traceId / correlationId / operationId
runId / runStepId / executionAttemptId
offeringId / offeringRevision
logicalModelId / backendModelId
executionPool / gatewayDeploymentId
capabilityContractVersion
inputAssetVersions[] / outputContract
pricingSnapshot / reservationId
idempotencyKey

Manifest 是审计和重放的业务依据。正式 API 以 Service Account 同时作为 Actor 和执行主体,并保存 DeveloperCredential 的稳定 ID;Playground 以 Customer User 为 Actor、Service Account 为执行主体,并保存 Playground Execution Grant ID。两种认证引用严格二选一,均不保存 Secret。内部 Workload Principal 只进入服务跳转或 Gateway Invocation Audit,不覆盖业务 Actor。ProviderCredentialVersion、物理账号和供应商原始价格不进入 Manifest;这些由对应私有网关冻结在自己的执行记录中。

文本同步与流式链路

文本、Embedding 和 Rerank 请求走 UUMI/new-api Text Gateway Pool:

  1. Public API Edge 验证 DeveloperCredential,或验证 Console BFF 持有的短期 Playground Execution Grant;网页产品由各自 BFF 鉴权 Customer Session。Customer Session、长期开发者凭据与内部 Grant 不得互换。
  2. Product Control 解析 Offering,Execution Control 创建 Attempt 并预占预算。
  3. Capability Router 选择 Text Pool 的具体 Gateway Deployment。
  4. Text Gateway 固定物理 Channel,向 Provider 发起请求。
  5. OceanWay 透传标准化流式事件,同时累计 Usage。
  6. 响应结束后按实际 Usage 与价格快照结算;失败或结果不确定时进入相应释放或对账流程。

断流重连不能自动重放一个可能已产生 Provider 消费的请求。只有 Provider 或 Gateway 提供可证明安全的幂等语义时,才允许透明恢复。

Text Gateway 每次物理调用至少返回稳定 Gateway Invocation ID、实际 Deployment/Channel 摘要、标准状态、Usage/Cost 和规范化错误。若当前 UUMI/new-api 不能可靠暴露 Provider Attempt,OceanWay 只记录“Provider 未观测”,不能读取其数据库后拼装未经契约化的细节。

媒体异步执行链路

图片和视频使用同一业务协议;同步图片只是这个协议在较短时间内返回终态的特例。

当前可靠性基线是主动查询和对账。Provider Callback 不是第一阶段依赖;未来某个 Provider 确有必要时,回调入口作为 Media Gateway 的内部可选模块增加,而不是拆成另一个独立平台。

Media Gateway 单一边界与内置模块

下列模块属于同一个产品、同一代码库和同一运维所有权。实现上可以按进程角色独立扩缩,但架构上不形成新的客户平台或额外控制面。

内置模块职责
Internal API接受 OceanWay 工作负载身份,处理创建、查询和结果读取
Supply / Provider Credential Control管理 Provider Supply、账号、ProviderCredentialVersion、能力和供应成本
Task / Provider Attempt Registry保存提交意图、Task、Attempt、冻结路由、上游 ID、状态和恢复事实
Dispatcher选择符合内部供应策略的 Supply,创建并提交 Provider Attempt
Provider Adapters翻译 Provider 的创建、查询和结果协议
Poller使用原 Attempt 与凭据版本查询已存在的上游任务
Reconciler处理提交不确定、状态冲突和需要继续核验的事实
Result Handling / Spool取回、校验和暂存 Provider 输出,向 OceanWay 报告可导入结果

Provider Callback、Cancel Adapter 和共享 Result Spool 是后续增强能力。它们即使实现,也仍然处于 Media Gateway 边界内。

两级任务与 Attempt

OceanWay 与 Media Gateway 各有一层 Attempt,命名和所有权不能混用:

OceanWay Run
└── OceanWay Execution Attempt
    └── gatewayTaskId
        └── Media Gateway Task
            ├── Provider Attempt 1
            └── Provider Attempt 2(仅在网关策略证明安全时)
  • OceanWay Execution Attempt 表示一次面向用户的业务执行与计费身份。
  • Media Gateway Task 是该 Attempt 在媒体基础设施中的不透明执行锚点。
  • Provider Attempt 表示 Media Gateway 对真实 Provider 的一次提交尝试。
  • 一个 OceanWay Execution Attempt 只创建一个 Media Gateway Task。
  • Media Gateway 可以依据已发布的供应策略做有界内部重试或故障切换,但不得在 Provider 已接受或提交结果未知时盲目创建新 Attempt。
  • 用户在终态失败后显式重试,必须创建新的 OceanWay Execution Attempt 和新的 Media Gateway Task。

OceanWay 不复制 Provider Attempt 细节,只保存 gatewayTaskId、Gateway Deployment、标准状态、Usage/Cost 摘要和审计关联。Media Gateway 不复制用户、钱包和业务资源。

Media Gateway 持久事实

Media Gateway 至少需要可靠保存:

mediaTaskId / requestId
oceanwayOperationId / correlationId / executionAttemptRef / traceId
backendModelId / capability
supplyId / providerCredentialVersionId / adapterVersion
providerRouteSnapshot / requestFingerprint / idempotencyKeyHash
providerAttemptId / providerRequestId / upstreamTaskId
providerSideEffectState
normalizedStatus / stateVersion
resultRefs / usageFact / providerCostFact
sanitizedError / reconciliationState
createdAt / submittedAt / terminalAt

其中 executionAttemptRef 是不透明关联,不要求复制 OceanWay 用户或企业资料。Registry 不保存 DeveloperCredential、用户余额、零售价、完整 Prompt、媒体二进制、长期签名 URL 或 Provider Secret。

提交前必须先持久化 Task、Attempt 与请求指纹。调用超时且无法证明 Provider 是否创建任务时,状态进入 UNKNOWN / RECONCILING;禁止直接换 Supply 再次提交。

一旦获得 upstreamTaskId,或 Provider 副作用可能已经发生,原 supplyId + providerCredentialVersionId + adapterVersion + routeSnapshot 必须冻结。后续 Poll、Reconcile 和结果取回使用同一 Provider Attempt,不能按照最新路由重新选择。

状态映射

Media Gateway 可维护更细的内部状态,但对 OceanWay 只发布稳定投影:

Media Gateway 内部事实OceanWay Execution 状态
created / submittingdispatching
accepted / queuedqueued
processingrunning
unknown / reconcilingreconciliation_required
provider_succeeded / result_readyrunning,等待正式资产登记
succeeded + result report completeoutput_pending
provider_failed / failedfailed
cancelled(未来能力确认)cancelled

Provider 返回 Success 不等于 OceanWay Run 成功。只有输出经过安全取回、格式与内容校验、对象存储写入、AssetVersion 登记和账务终态后,OceanWay 才能将业务 Output 标记为成功。

终态不得因迟到的 Poll 或未来 Callback 回退。若 Provider 成功事实与失败事实冲突,应保留事实并进入对账,而不是按“最后写入”覆盖。

标准诊断投影与错误契约

两个私有网关向 OceanWay 发布不同执行语义下的统一诊断外壳:

gatewayObservationId / schemaVersion / observedAt
requestId / traceId / correlationId / oceanwayOperationId
gatewayPoolId / gatewayDeploymentId
gatewayInvocationId? / gatewayTaskId? / providerAttemptId?
backendModelId / capability / configRevision
normalizedStatus / stateVersion
submissionCertainty
normalizedError?
usageFactRef? / providerCostFactRef? / resultSummary?

normalizedError 至少包含稳定 code、发生 phaseseverityretryDispositioncompensationDisposition 和脱敏摘要。媒体提交确定性使用 not_submitted / submitted / provider_accepted / unknown 等可解释事实;unknown 不得被翻译成普通失败后自动重试。

OceanWay Operational Read Model 只保存这些标准摘要与不透明引用。ProviderCredentialVersion、原始 Payload、完整 Prompt、媒体内容和网关私有路由细节不进入中央投影。若 Observation 缺失,后台显示“未观测”,不能按时间、模型名或状态猜测。

两级重试所有权

为了同时避免重复生成和重复调度,重试分为两层。

Media Gateway 内部恢复

Media Gateway 可以:

  • 在请求尚未发出时恢复连接或重新领取 Worker 租约;
  • 在能证明 Provider 未创建任务时,按已发布策略创建新的 Provider Attempt;
  • Provider 已接受后继续 Poll/Reconcile;
  • Provider 已成功后只重试结果取回和暂存,不重新生成。

Media Gateway 不可以:

  • acceptedunknown 后换 Supply 重新提交;
  • 跨到 Text Pool 或另一个 OceanWay Offering;
  • 根据用户等级、余额或零售价决定重试;
  • 为用户的显式“再生成”复用旧业务 Attempt。

OceanWay 业务重试

OceanWay 决定用户是否可以重试、是否再次预占和是否生成新 Attempt。重试只能在旧 Attempt 已有可解释终态或完成正式人工处置后开始;新 Attempt 可以重新执行当前路由策略,但不覆盖旧记录。

用户计费与供应成本

用户价格和 Provider 成本是两条独立事实链:

OceanWay Product Price
  Offering Revision + Retail Rate + Contract / Discount
  → Quote → Reserve → Settle / Release / Refund / Reconcile

Private Gateway Provider Cost
  Deployment / Supply + Provider Usage + Cost Snapshot
  → Cost Fact → Margin Analytics / Provider Reconciliation

Media Gateway 只报告 providerUsageproviderCostsupplyIdproviderAttemptId 等供应事实。它不保存用户售价、用户余额、订阅、折扣或客户结算记录,也不拥有扣款权限。

异步媒体的账务语义固定为:

  1. 提交前由 OceanWay 预占;
  2. Gateway 返回 accepted/queued 时保持预占,不立即结算;
  3. Provider 成功且 OceanWay 正式登记输出后结算;
  4. 确定失败或确定取消时释放或退款;
  5. 提交、结果或成本不确定时进入待对账,不猜测成功或失败。

同一 executionAttemptId + chargeType 只能产生一次有效结算。Gateway 的重复状态、Poll 结果或未来回调不得直接触发第二次扣款。

结果与正式资产

Media Gateway 的 Result Spool 是执行恢复与结果交接层,不是全局素材库。它可以保存受控的临时结果和校验信息,但不会获得 OceanWay Asset 的所有权、ACL、版本、分享或删除语义。

OceanWay Asset Service 负责:

  • 校验真实 MIME、大小、可解码性和内容哈希;
  • 写入统一对象存储或受控外部存储;
  • 创建 Asset、AssetVersion、Rendition 和 Lineage;
  • 绑定 Organization、Workspace、Project、Run 和业务对象;
  • 生成权限受控的内容读取或下载地址。

Developer API 的内容访问仍经过 OceanWay owner-scoped 接口。Gateway 地址、内部 Workload Identity 和 Provider 临时 URL 不能暴露给开发者。

身份、网络与管理面

  • 产品用户和企业成员只在 Identity/Tenant Domain 中存在;Developer App、Environment、Service Account 与 DeveloperCredential 只在 Developer Access Domain 中存在。
  • ai.oceanway.tech 不接受登录后开发者配置;console.oceanway.tech/ai 使用 Customer Session 调用 Developer Access Domain,api.oceanway.tech/v1 使用 DeveloperCredential 或受限 Playground Execution Grant 调用 Execution Edge。
  • OceanWay Runtime 以 Workload Principal 使用短期 Workload Credential 或 mTLS assertion 调用私有网关;DeveloperCredential 不会被交换、复用或转发为该认证材料。
  • Text Pool 与 Media Pool 的 Workload Credential、数据库凭据和 ProviderCredentialVersion 完全分离。
  • ProviderCredentialVersion 由对应网关持有,版本化并可审计;OceanWay 客户域不读取其明文。
  • DeveloperCredential、WebhookSigningSecretVersion、MCPConnectionSecret、ProviderCredentialVersion 与 Workload Credential 是不同信任边界的凭据类型,不能共享 Secret、Audience、校验器或轮换记录。
  • Text/Media Gateway 的人类运维统一通过 admin.oceanway.tech 的 Workforce SSO/RBAC 或基础设施 IAM;Break-glass 也由外部 IAM 管理,Media Gateway 不建设本地用户与 API Key 服务。
  • 私有网关只允许通过内网、服务网格或受控入口访问;浏览器和 DeveloperCredential 不能直达。
  • Gateway 获得的输入和输出权限应按单次任务收窄,不获得 OceanWay 对象存储管理权限。

中央后台查询 Gateway 的规范化运行投影,不直连 Gateway 数据库。暂停新调度、排空 Supply、查询原 Task、重取原结果或撤销 ProviderCredentialVersion 等动作只能通过 Admin Command Gateway 调用网关拥有的受控命令,并携带权限、幂等、原因、影响预览和 Audit;后台不得提供任意 Provider 请求或直接改写 Task 状态。

Cancel、Callback 与多实例边界

以下内容是明确的后续增强,不应在当前文档中伪装成现有能力。

Cancel

只有 Provider Adapter 明确声明支持、并能返回可验证取消结果时,Media Gateway 才能暴露取消命令。OceanWay 的 cancel_requested 表示用户意图,不等于 Provider 已取消;Provider 先完成时必须保留成功事实并按业务和账务规则处理。

Provider Callback

当前主链路使用 Poller/Reconciler。未来若加入 Provider Callback,应作为 Media Gateway 内部入口,执行原始 Body 验签、重放保护、持久收据、去重、乱序处理,并与 Poller 进入同一状态机。客户 Webhook 由 Developer Access Domain 使用独立的 WebhookSigningSecretVersion 发出,两者不是同一个服务,也不复用 DeveloperCredential 或 ProviderCredentialVersion。

多实例 Result Handling

当前本地 Result Spool 在单实例阶段可用。扩展到多机前,必须迁移到共享对象存储或等价的耐久介质,并验证跨节点租约、幂等取回、崩溃接管和恢复;不能只增加 Worker 数量后假定安全。

从嵌套链路迁移到同级双网关

G0:冻结边界

  • 记录 pic-vps 的 UUMI/new-api 部署、模型、Channel、凭据引用和存量媒体任务。
  • 冻结 Media Gateway 产品化范围:不建设本地 User、CustomerGroup、APIKey、模型广场和用户售价服务。
  • 确认 OceanWay 是 Product Catalog、Developer Access、Wallet、Run 和 Asset 的唯一事实源。

G1:冻结服务间契约

  • 定义工作负载鉴权、Idempotency-KeyX-OceanWay-Operation-ID、Task 状态和错误映射。
  • 定义 Request/Trace/Correlation 传播、Gateway Observation 与标准诊断错误契约。
  • 建立 OceanWay Execution Attempt ↔ gatewayTaskId 的持久绑定。
  • 对齐图片/视频创建、统一任务查询、结果读取和 Provider 成本报告。
  • 将 Cancel 与 Callback 标为 capability-gated 的未来契约。

G2:接通端到端闭环

  • 先灰度一条同步图片 Offering,验证结果进入 OceanWay Asset。
  • 再灰度异步图片和一条视频 Offering。
  • 修正公共异步查询、内容读取、预占保持、终态结算和失败释放。
  • 验证 Provider Accepted 或 Unknown 时不会重复提交。

G3:开发者入口与控制面收口

  • ai.oceanway.tech 只提供公开模型、文档、API 列表价和状态,不承载登录后写操作。
  • Developer App、Environment、Service Account、DeveloperCredential、Webhook 和 API 使用记录只通过 console.oceanway.tech/ai 管理;购买、钱包、订阅和账单使用 Console 的统一商业界面。
  • 所有公共机器流量只进入 api.oceanway.tech/v1,DeveloperCredential 只在该 Edge 终止。
  • Media Gateway 中删除本地 User、CustomerGroup、APIKey、公开模型广场和用户价格簿服务;内部鉴权改用外部签发的短期 Workload Credential。
  • OceanWay 只同步媒体能力、可用性和成本事实,不同步 Gateway 客户域数据。

G4:媒体流量切换

  • 按 Offering Revision 对新 Attempt 做 canary,不做同请求双写。
  • 存量 UUMI/new-api 媒体任务继续原路到终态。
  • 核对成功率、延迟、成本、幂等、资产和账务后,排空并移除旧媒体 Channel。
  • Text Gateway Pool 保持运行,不受媒体切换影响。

G5:按需增强

  • Provider Cancel;
  • Provider Callback;
  • 共享 Result Spool 与多实例接管;
  • 更完整的自动 Reconciliation;
  • 生产负载、故障和恢复演练。

回滚只改变新 Attempt 的路由,不迁移或重写已经发生的 Provider Task、钱包账本和正式资产。

第一阶段验收门禁

  • 新媒体 Attempt 直接进入 oceanway-media-gateway,不再经过 UUMI/new-api。
  • Text 与 Media Pool 的路由、凭据和运行记录彼此隔离。
  • 两个 Pool 都能发布带 Correlation/Operation、状态、确定性和规范化错误的诊断投影。
  • Media Gateway 不存在本地 User、CustomerGroup、APIKey、模型广场和用户售价服务。
  • OceanWay 可以持久映射 Execution Attempt ↔ gatewayTaskId,并按 Owner 鉴权查询。
  • Media Task/Provider Attempt 在服务重启后可从数据库恢复。
  • Poll/Reconcile 使用创建时冻结的 Supply、ProviderCredentialVersion 和上游 Task ID。
  • Provider Accepted 或提交 Unknown 时不会盲目重提。
  • Provider 成功但结果取回失败时只恢复结果,不重新生成。
  • Gateway Result 不会被误当作 OceanWay 正式 Asset。
  • 异步 202/queued 保持预占,只有正式输出成功才结算。
  • 重复查询、状态事件和恢复不会产生重复资产或重复扣款。
  • DeveloperCredential、用户售价、余额和账本事实不会进入私有网关。
  • admin.oceanway.tech 只读取标准投影,不直连 Text/Media Gateway 数据库;所有写操作经过受控命令和 Audit。
  • 存量媒体任务可以沿旧链路排空,切换和回滚只影响新 Attempt。

不可妥协的规则

  1. OceanWay 是客户身份、产品模型、Surface、用户售价、钱包、Run、正式资产和最终业务状态的唯一事实源。
  2. UUMI/new-api 只属于 Text Gateway Pool;Media Gateway 在目标链路中直接连接媒体 Provider。
  3. Media Gateway 是单一服务边界,其 Registry、Worker 和 Adapter 只是内部模块。
  4. Media Gateway 不建设本地 User、CustomerGroup、APIKey、模型广场和用户售价服务。
  5. 一个 OceanWay Execution Attempt 只对应一个 Media Gateway Task;用户重试创建新的二者。
  6. Provider 调用前先持久化提交意图,UNKNOWN 状态禁止盲目重提。
  7. Provider 接受后冻结原 Supply、ProviderCredentialVersion、Adapter 与 Upstream Task。
  8. Provider Success 不等于业务 Success;正式资产登记完成后才能结算成功。
  9. 用户费用和 Provider 成本是两条独立账务链,任何网关都不能直接修改用户账本。
  10. Text Pool 与 Media Pool 同级、互不级联、互不跨池静默降级。
  11. Cancel、Provider Callback 和多机 Result Spool 是后续能力,未实现前必须明确暴露能力限制。
  12. 迁移只影响新 Attempt;存量任务、账本和资产不被重写。
  13. Gateway 诊断通过版本化 Observation 契约进入中央运维投影;管理员不得直接改网关数据库或绕过状态机。
  14. ai.oceanway.tech 只负责公开开发者发现,console.oceanway.tech/ai 负责登录后 Developer Control,api.oceanway.tech/v1 是唯一机器入口。
  15. Developer Access Domain 统一拥有 Developer App → Environment → Service Account → DeveloperCredential;DeveloperCredential 只在 Public API Edge 终止。
  16. DeveloperCredential、WebhookSigningSecretVersion、MCPConnectionSecret、ProviderCredentialVersion 与 Workload Credential 必须分型,不能跨信任边界复用。

On this page