diff --git a/packages/ai/src/route/transport/websocket.ts b/packages/ai/src/route/transport/websocket.ts index f01c6acb63d..4e25c81ee99 100644 --- a/packages/ai/src/route/transport/websocket.ts +++ b/packages/ai/src/route/transport/websocket.ts @@ -8,14 +8,7 @@ import { type HttpContext, type TransportOperation, } from "../../schema/index.js" -import * as HttpTransport from "./http.js" -import type { Transport } from "./index.js" -import type { - ChannelObservation, - WebSocketChannelDriver, - WebSocketChannelExchange, - WebSocketChannelExecutor, -} from "./websocket-channel.js" +import type { ChannelObservation, WebSocketChannelExecutor } from "./websocket-channel.js" export interface WebSocketRequest { readonly url: string @@ -432,81 +425,7 @@ export const direct: Effect.Effect { - readonly toMessage: (body: Body | Record) => Effect.Effect - readonly encodeMessage: (message: Message) => string -} - -export type JsonPatch = Partial> - -export interface JsonTransport extends Transport { - readonly with: (patch: JsonPatch) => JsonTransport -} - -export const json = (input: JsonInput): JsonTransport => ({ - id: "websocket-json", - with: (patch) => json({ ...input, ...patch }), - prepare: (prepareInput) => - Effect.gen(function* () { - const parts = yield* HttpTransport.jsonRequestParts({ - ...prepareInput, - }) - return { - url: yield* toWebSocketUrl(parts.url), - headers: parts.headers, - message: input.encodeMessage(yield* input.toMessage(parts.jsonBody)), - } - }), - execute: (prepared, request, _runtime, options) => { - const webSocket = options?.webSocket - if (!webSocket) { - return Effect.fail( - transportError("WebSocket JSON transport requires StreamOptions.webSocket", { - url: prepared.url, - operation: "request", - code: "unavailable", - phase: "prepare", - delivery: "not-sent", - }), - ) - } - const driver: WebSocketChannelDriver = { - create: () => Effect.succeed({ message: prepared.message, mode: "full" }), - observe: (_create, frame) => Effect.succeed({ type: "frame", frame }), - } - const exchange: WebSocketChannelExchange = { - id: request.id ?? "request", - connect: { url: prepared.url, headers: prepared.headers }, - fallback: () => - Stream.fail( - transportError("WebSocket JSON transport does not provide HTTP fallback", { - url: prepared.url, - operation: "request", - code: "websocket", - phase: "fallback", - delivery: "not-sent", - }), - ), - driver, - } - return webSocket.execute(exchange) - }, -}) - -export const jsonTransport = { - id: "websocket-json", - with: json, -} as const - export const WebSocketTransport = { - json, - jsonTransport, direct, makeDirect, open,