Skip to content

JavaScript/TypeScript Client API

Client 代码按照同一套生命周期阅读:

  1. 打开 runtime。
  2. 连接 client endpoint。
  3. 打开 session。
  4. submit、cancel 或读取 event。

Native 和 browser 的包名不同,但 client session 的方法形态刻意保持一致。

宿主Role packageTransport package
Node.js/Deno@nnrp/native-clientTCP、QUIC、IPC 与 WebSocket 载体 package
Browser/edge@nnrp/browser-client@nnrp/transport-websocket

openNativeClient

在 Node.js 或 Deno 中打开 native client。

参数类型必填说明
optionsNnrpNativeClientOptionsEndpoint、transport policy、已安装 transport provider、session defaults、环境/platform 覆盖与可选 FFI binding。
返回可能抛出
Promise<NnrpClient>NnrpCapabilityErrorNnrpNativeBindingUnavailableError
ts
import { openNativeClient } from "@nnrp/native-client";
import { createTcpTransportProvider } from "@nnrp/transport-tcp";
import { createQuicTransportProvider } from "@nnrp/transport-quic";

const client = await openNativeClient({
  endpoint: "nnrps://runtime.example/session/default",
  transportPolicy: "auto",
  transports: [
    createQuicTransportProvider(),
    createTcpTransportProvider(),
  ],
});

openBrowserRuntime

打开 browser runtime。浏览器 client 先打开 runtime 再 connect,因为浏览器有独立的 WASM/module 生命周期。

参数类型必填说明
optionsNnrpBrowserRuntimeOptionsModule URL、预编译 module、artifact manifest、transport policy 与 browser transport provider。
返回
Promise<NnrpBrowserRuntime>
ts
import { openBrowserRuntime } from "@nnrp/browser-client";
import { createWebSocketTransportProvider } from "@nnrp/transport-websocket";

const runtime = await openBrowserRuntime({
  transportProviders: [createWebSocketTransportProvider()],
});

NnrpBrowserRuntime.connect

从已打开的 browser runtime 创建 browser client。

参数类型必填说明
optionsNnrpBrowserConnectOptionsEndpoint、可选 transport policy、可选 transport provider 与可选 session defaults。
返回
NnrpBrowserClient
ts
const client = runtime.connect({
  endpoint: "nnrps://runtime.example/session/default",
  providerEndpoint: "wss://runtime.example/nnrp",
  transportPolicy: "auto",
});

NnrpClient.openSession

打开 client session。Native 与 browser client 暴露同一个 session 概念。

参数类型必填说明
optionsNnrpSessionOptionsNnrpBrowserSessionOptionsInput profile、cadence、quality tier 与 metadata。
返回
NnrpClientSessionNnrpBrowserClientSession
ts
const session = client.openSession({ inputProfile: "tensor" });

ClientSession.submit

提交请求并等待 result。Native client 走 native submit/result hot path;browser client 走 browser runtime path,但 request 形态共享。

参数类型必填说明
requestNnrpSubmitRequestFrame id、payload/tensors、profile、cache/schema metadata 与 submit mode。
返回
Promise<NnrpResult>
ts
const result = await session.submit({
  frameId: 1,
  payload: new Uint8Array([1, 2, 3]),
  inputProfile: "tensor",
  submitMode: "inline",
});

ClientSession.submitNoWait

提交请求并返回 operation id。该方法当前用于 native client session。

参数类型必填说明
requestNnrpSubmitRequestSubmit request。
返回
Promise<bigint>

ClientSession.cancel

发送 Preview4 CANCEL 帧。NnrpClientSessionNnrpBrowserClientSession 暴露完全相同的方法。

参数类型必填说明
metadataControlRequestMetadata已冻结的 operation id、sequence、reason、role、flags 与 diagnostic 长度。
diagnosticUint8Array长度等于 metadata.diagnosticBytes 的诊断字节。
返回
Promise<void>

Preview4 Client 控制方法

Native 与 browser session 使用同一套控制面。每个方法都编码对应的 NNRP message,并通过当前 runtime 的一次粗粒度调用提交。

方法MessageMetadata可选 tail
abort(metadata, diagnostic?)AbortControlRequestMetadatadiagnostic bytes
updatePriority(metadata)PriorityUpdateSchedulingMetadata
updateDeadline(metadata)DeadlineSchedulingMetadata
expireAt(metadata)ExpireAtSchedulingMetadata
supersede(metadata, diagnostic?)SupersedeSupersedeMetadatadiagnostic bytes
updateBudget(metadata)BudgetUpdateBudgetMetadata
negotiateCapabilities(metadata, body?)CapabilityNegotiationCapabilityMetadatacapability entries
degradeProfile(metadata, body?)DegradeProfileCapabilityMetadatacapability entries
sendRouteHint(metadata, body?)RouteHintRouteHintMetadatatyped hint body
sendExecutionHint(metadata, body?)ExecutionHintRouteHintMetadatatyped hint body
sendTraceContext(metadata, body?)TraceContextTraceContextMetadatatrace attributes
sendControl(messageType, metadata, tail?)任意允许 client 发送的 Preview4 control frame匹配的 runtime metadata 类型声明的 tail

sendControlErrorRecoverableRetryAfter 与扩展安全控制路由的 typed escape hatch。 messageType 与 metadata 类型不匹配时必须拒绝。

Preview4 Client 对象与缓存方法

方法MessageMetadata可选 tail
declareObject(metadata, body?)ObjectDeclareObjectDescriptorMetadataobject metadata
referenceObject(metadata, body?)ObjectRefObjectReferenceMetadatareference metadata
releaseObject(metadata, diagnostic?)ObjectReleaseObjectReleaseMetadatadiagnostic bytes
patchObject(metadata, delta)ObjectPatchObjectDeltaMetadatadelta bytes
sendObjectDelta(metadata, delta)ObjectDeltaObjectDeltaMetadatadelta bytes
referenceCache(metadata, body?)CacheReferenceCacheReferenceMetadatacache metadata
reportCacheMiss(metadata, diagnostic?)CacheMissCacheMissMetadatadiagnostic bytes
invalidateCache(metadata)CacheInvalidateCacheInvalidateMetadata

对象与缓存方法返回 Promise<void>,不会在每次 submit 前隐式执行 cache lookup。

Preview4 Runtime Event

nextEvent()events()NnrpRuntimeEvent 增加全部 Preview4 runtime-frame discriminant:cancelabortpriority-updatedeadlineexpire-atsupersedebudget-updateprogresspartial-resultbackpressurecredit-updatecapability-negotiationdegrade-profileroute-hintexecution-hinttrace-contextresult-drop-reasonrecoverable-errorretry-afterobject-declareobject-refobject-releaseobject-patchobject-deltacache-referencecache-misscache-invalidate。精确 typed 字段和语义化 tail 名称冻结在 运行时控制与对象

同一个 operation 内的事件保持 wire order,不同 operation 的事件可以交错。取消后仍可观察 result-drop-reason,但普通结果迭代会抑制该 operation 的迟到 resultpartial-result payload。

Submit 取消

submit(request, options?)submitNoWait(request, options?) 接受 NnrpSubmitOptions

字段类型必填说明
signalNnrpAbortSignalLike已 abort 的 signal 在 dispatch 前拒绝;dispatch 后 abort 会发送 CANCEL
timeoutMillisnumber本地等待上限;SDK 在 dispatch 前发送 DEADLINE,超时后取消任务。

这些 helper 与显式控制方法共用 control sequence allocator,不会创建旁路取消通道。

ClientSession.nextEvent

读取下一条 runtime event。

参数类型必填说明
optionsNnrpEventPollOptionsEvent polling 选项。
返回
Promise<NnrpRuntimeEvent>

运行时差异

领域Native clientBrowser client
@nnrp/native-client@nnrp/browser-client
Runtime 打开方式openNativeClient(options) 直接返回已连接 client。openBrowserRuntime(options) 返回 runtime,然后 runtime.connect(options) 返回 client。
Transport packageTCP、QUIC、IPC 与 WebSocket package 携带 native transport artifact。Browser client 使用 WebSocket Provider 与 browser-client WASM。
Server API不暴露。不暴露。

选项类型

NnrpNativeClientOptions

字段类型必填说明
endpointstring远端 NNRP endpoint。
providerEndpointstring | URL诊断、一致性测试或受控部署使用的显式载体本地 endpoint。
transportPolicyNnrpTransportPolicyautoprefer-*force-* 选择策略。
transportsreadonly NnrpTransportProvider[]已安装 native transport provider。见 Transport Provider
sessionDefaultsNnrpSessionOptionssession 未设置字段时使用的默认值。
environmentRecord<string, string>Artifact 查找或诊断用环境变量覆盖。
platformstring测试和受控打包校验用 platform 覆盖。
ffiNnrpNativeFfiBinding受控部署和测试用显式 native binding。

NnrpBrowserRuntimeOptions

字段类型必填说明
moduleUrlstring | URL显式 WASM module URL。
moduleWebAssembly.Module预编译 WASM module。
artifactNnrpWasmArtifactOptionsBrowser WASM primitive manifest 与可选 base URL。
transportPolicyNnrpTransportPolicyBrowser transport selection policy。
transportProvidersreadonly NnrpBrowserTransportProvider[]Browser transport provider。当前 SDK 接受 WebSocket provider。见 Transport Provider

NnrpBrowserConnectOptions

字段类型必填说明
endpointstring远端 nnrp://nnrps:// 应用 endpoint。
providerEndpointstring | URL显式 ws://wss:// 载体本地 endpoint。
transportPolicyNnrpTransportPolicySelection policy。
transportProvidersreadonly NnrpBrowserTransportProvider[]本连接允许的 browser provider。
sessionDefaultsNnrpBrowserSessionOptionssession 未设置字段时使用的默认值。

NnrpSessionOptions

字段类型必填说明
inputProfilestringtensortoken 等 input profile 名称。
targetCadencenumber请求 cadence。
qualityTiernumber应用质量层级。
metadataRecord<string, unknown>附加到 session 的应用 metadata。

NnrpBrowserSessionOptions

NnrpSessionOptions 相同,但作用域是 browser client。

NnrpEventPollOptions

字段类型必填说明
timeoutMsnumber最大等待毫秒数。
maxEventsnumberruntime 批量返回 event 时最多读取数量。

NNRP Documentation