调度、执行与模型网关池
OceanWay 控制面、文本网关池与媒体网关池的正式边界、执行协议、计费和迁移方案
调度、执行与模型网关池
本页是 OceanWay 模型执行链路的主规范。它回答五个问题:公开产品在哪里,用户和钱包在哪里,文本与媒体请求如何分流,长时媒体任务由谁恢复,以及供应成本和用户计费如何保持独立。管理员如何跨这些边界诊断、告警和处置,见管理员平台与运维控制面。
正式决策
OceanWay 正式采用“中心控制面 + 同级双网关池”,而不是网关层层嵌套:
| 边界 | 正式定位 | 唯一负责 | 明确不负责 |
|---|---|---|---|
| OceanWay Core / Execution Edge | 客户、产品和业务执行控制面 | 用户、企业、子账号、Developer Access Domain、商品目录、Surface、Run、钱包、账单、正式资产 | ProviderCredentialVersion、物理渠道选择 |
| Text Gateway Pool | UUMI/new-api 组成的私有文本网关池 | 文本、Embedding、Rerank 等协议适配、物理 Channel、流式传输、Token Usage 和供应成本 | 客户产品目录、用户售价、钱包、正式资产 |
| Media Gateway Pool | oceanway-media-gateway 组成的私有媒体网关池 | 图片/视频 Provider 接入、Supply、ProviderCredentialVersion、媒体 Task、Provider Attempt、轮询恢复、结果归一化和供应成本 | 本地 User/CustomerGroup/APIKey 服务、模型广场、用户售价、钱包、正式资产 |
以下结论不再作为待决策项:
ai.oceanway.tech只承载无需登录的公开开发者中心,包括公开模型目录、文档、API 列表价、状态和进入控制台的入口;它不承载 App、密钥、用量、购买或账单管理。- 登录后的 Developer Control 固定在
console.oceanway.tech/ai,管理 Developer App、Environment、Service Account、DeveloperCredential、Webhook 和仅 API 用量;钱包、购买、订阅、账单和跨产品总览继续使用 Console 的统一商业与资源界面。 api.oceanway.tech/v1是独立的唯一公共机器入口,只接受 DeveloperCredential 或由 Console BFF 持有的短期 Playground Execution Grant,不接受 Customer Session 或门户页面请求。- UUMI/new-api 收敛为 Text Gateway Pool;它不再位于目标媒体执行主链路中。
oceanway-media-gateway是一个完整服务边界,直接连接图片和视频 Provider。- Media Gateway 内的 API、Registry、Dispatcher、Provider Adapter、Poller、Reconciler 和 Result Handling 是同一代码库与所有权边界内的模块,不是需要独立建设的四套平台。
- 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;
web、api、internal等 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;
- 保存
gatewayDeploymentId和gatewayTaskId; - 接收或查询终态、登记正式资产;
- 结算、释放、退款与待对账;
- 业务重试、用户取消意图、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
idempotencyKeyManifest 是审计和重放的业务依据。正式 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:
- Public API Edge 验证 DeveloperCredential,或验证 Console BFF 持有的短期 Playground Execution Grant;网页产品由各自 BFF 鉴权 Customer Session。Customer Session、长期开发者凭据与内部 Grant 不得互换。
- Product Control 解析 Offering,Execution Control 创建 Attempt 并预占预算。
- Capability Router 选择 Text Pool 的具体 Gateway Deployment。
- Text Gateway 固定物理 Channel,向 Provider 发起请求。
- OceanWay 透传标准化流式事件,同时累计 Usage。
- 响应结束后按实际 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 / submitting | dispatching |
| accepted / queued | queued |
| processing | running |
| unknown / reconciling | reconciliation_required |
| provider_succeeded / result_ready | running,等待正式资产登记 |
| succeeded + result report complete | output_pending |
| provider_failed / failed | failed |
| 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、发生 phase、severity、retryDisposition、compensationDisposition 和脱敏摘要。媒体提交确定性使用 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 不可以:
- 在
accepted或unknown后换 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 ReconciliationMedia Gateway 只报告 providerUsage、providerCost、supplyId 和 providerAttemptId 等供应事实。它不保存用户售价、用户余额、订阅、折扣或客户结算记录,也不拥有扣款权限。
异步媒体的账务语义固定为:
- 提交前由 OceanWay 预占;
- Gateway 返回
accepted/queued时保持预占,不立即结算; - Provider 成功且 OceanWay 正式登记输出后结算;
- 确定失败或确定取消时释放或退款;
- 提交、结果或成本不确定时进入待对账,不猜测成功或失败。
同一 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-Key、X-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。
不可妥协的规则
- OceanWay 是客户身份、产品模型、Surface、用户售价、钱包、Run、正式资产和最终业务状态的唯一事实源。
- UUMI/new-api 只属于 Text Gateway Pool;Media Gateway 在目标链路中直接连接媒体 Provider。
- Media Gateway 是单一服务边界,其 Registry、Worker 和 Adapter 只是内部模块。
- Media Gateway 不建设本地 User、CustomerGroup、APIKey、模型广场和用户售价服务。
- 一个 OceanWay Execution Attempt 只对应一个 Media Gateway Task;用户重试创建新的二者。
- Provider 调用前先持久化提交意图,
UNKNOWN状态禁止盲目重提。 - Provider 接受后冻结原 Supply、ProviderCredentialVersion、Adapter 与 Upstream Task。
- Provider Success 不等于业务 Success;正式资产登记完成后才能结算成功。
- 用户费用和 Provider 成本是两条独立账务链,任何网关都不能直接修改用户账本。
- Text Pool 与 Media Pool 同级、互不级联、互不跨池静默降级。
- Cancel、Provider Callback 和多机 Result Spool 是后续能力,未实现前必须明确暴露能力限制。
- 迁移只影响新 Attempt;存量任务、账本和资产不被重写。
- Gateway 诊断通过版本化 Observation 契约进入中央运维投影;管理员不得直接改网关数据库或绕过状态机。
ai.oceanway.tech只负责公开开发者发现,console.oceanway.tech/ai负责登录后 Developer Control,api.oceanway.tech/v1是唯一机器入口。- Developer Access Domain 统一拥有
Developer App → Environment → Service Account → DeveloperCredential;DeveloperCredential 只在 Public API Edge 终止。 - DeveloperCredential、WebhookSigningSecretVersion、MCPConnectionSecret、ProviderCredentialVersion 与 Workload Credential 必须分型,不能跨信任边界复用。