MCPcopy Create free account
hub / github.com/anomalyco/opencode / build

Function build

packages/llm/src/route/client.ts:247–298  ·  view source on GitHub ↗
(routeInput: BuiltRouteInput)

Source from the content-addressed store, hash-verified

245 }
246
247 const build = (routeInput: BuiltRouteInput): Route<Body, Prepared> => {
248 const route: Route<Body, Prepared> = {
249 id: routeInput.id,
250 provider: routeInput.provider === undefined ? undefined : ProviderID.make(routeInput.provider),
251 protocol: protocol.id,
252 endpoint: routeInput.endpoint,
253 auth: routeInput.auth ?? Auth.none,
254 transport: routeInput.transport,
255 defaults: routeInput.defaults ?? {},
256 body: protocol.body,
257 with: (patch: RoutePatch<Body, Prepared>) => {
258 const { id, provider, auth, transport, endpoint, ...defaults } = patch
259 return build({
260 ...routeInput,
261 id: id ?? routeInput.id,
262 provider: provider ?? routeInput.provider,
263 auth: auth ?? routeInput.auth,
264 endpoint: endpoint ? Endpoint.merge(routeInput.endpoint, endpoint) : routeInput.endpoint,
265 transport: (transport as Transport<Body, Prepared, Frame> | undefined) ?? routeInput.transport,
266 defaults: mergeRouteDefaults(route.defaults, defaults),
267 })
268 },
269 model: (input) => makeRouteModel(route, input),
270 prepareTransport: (body, request) =>
271 routeInput.transport.prepare({
272 body,
273 request,
274 endpoint: routeInput.endpoint,
275 auth: routeInput.auth ?? Auth.none,
276 encodeBody,
277 headers: routeInput.headers,
278 }),
279 streamPrepared: (prepared: Prepared, request: LLMRequest, runtime: TransportRuntime) => {
280 const route = `${request.model.provider}/${request.model.route.id}`
281 const events = routeInput.transport
282 .frames(prepared, request, runtime)
283 .pipe(
284 Stream.mapEffect(decodeEvent(route)),
285 protocol.stream.terminal ? Stream.takeUntil(protocol.stream.terminal) : (stream) => stream,
286 )
287 return events.pipe(
288 Stream.mapAccumEffect(
289 () => protocol.stream.initial(request),
290 protocol.stream.step,
291 protocol.stream.onHalt ? { onHalt: protocol.stream.onHalt } : undefined,
292 ),
293 Stream.catchCause((cause) => Stream.fail(streamError(route, `Failed to read ${route} stream`, cause))),
294 )
295 },
296 } satisfies Route<Body, Prepared>
297 return route
298 }
299
300 return build({ ...input, defaults: mergeRouteDefaults(undefined, input.defaults ?? {}) })
301}

Callers 1

makeFromTransportFunction · 0.70

Calls 6

mergeRouteDefaultsFunction · 0.85
makeRouteModelFunction · 0.85
streamErrorFunction · 0.85
decodeEventFunction · 0.70
makeMethod · 0.45
prepareMethod · 0.45

Tested by

no test coverage detected