MCPcopy Index your code
hub / github.com/anomalyco/opencode / prepareOptions

Function prepareOptions

packages/core/src/aisdk.ts:74–122  ·  view source on GitHub ↗
(model: ModelV2.Info, pkg: string)

Source from the content-addressed store, hash-verified

72}
73
74function prepareOptions(model: ModelV2.Info, pkg: string) {
75 const options: Record<string, any> = {
76 name: model.providerID,
77 ...(model.api.type === "aisdk" ? (model.api.settings ?? {}) : {}),
78 ...model.request.body,
79 }
80 if (model.api.type === "aisdk" && model.api.url) options.baseURL = model.api.url
81
82 const customFetch = options.fetch
83 const chunkTimeout = options.chunkTimeout
84 delete options.chunkTimeout
85 options.fetch = async (input: Parameters<typeof fetch>[0], init?: RequestInit) => {
86 const opts = { ...(init ?? {}) }
87 const signals = [
88 opts.signal,
89 typeof chunkTimeout === "number" && chunkTimeout > 0 ? new AbortController() : undefined,
90 options.timeout !== undefined && options.timeout !== null && options.timeout !== false
91 ? AbortSignal.timeout(options.timeout)
92 : undefined,
93 ].filter((item): item is AbortSignal | AbortController => Boolean(item))
94 const chunkAbortCtl = signals.find((item): item is AbortController => item instanceof AbortController)
95 const abortSignals = signals.map((item) => (item instanceof AbortController ? item.signal : item))
96 if (abortSignals.length === 1) opts.signal = abortSignals[0]
97 if (abortSignals.length > 1) opts.signal = AbortSignal.any(abortSignals)
98
99 if (
100 (pkg === "@ai-sdk/openai" || pkg === "@ai-sdk/azure" || pkg === "@ai-sdk/amazon-bedrock/mantle") &&
101 opts.body &&
102 opts.method === "POST"
103 ) {
104 const body = JSON.parse(opts.body as string)
105 if (body.store !== true && Array.isArray(body.input)) {
106 for (const item of body.input) {
107 if ("id" in item) delete item.id
108 }
109 opts.body = JSON.stringify(body)
110 }
111 }
112
113 const res = await (typeof customFetch === "function" ? customFetch : fetch)(input, {
114 ...opts,
115 timeout: false,
116 })
117 if (!chunkAbortCtl || typeof chunkTimeout !== "number") return res
118 return wrapSSE(res, chunkTimeout, chunkAbortCtl)
119 }
120
121 return options
122}
123
124export class InitError extends Schema.TaggedErrorClass<InitError>()("AISDK.InitError", {
125 providerID: ProviderV2.ID,

Callers 1

aisdk.tsFile · 0.85

Calls 2

wrapSSEFunction · 0.70
findMethod · 0.65

Tested by

no test coverage detected