( data: any, )
| 2207 | |
| 2208 | const parseOpenAIResponseData = async ( |
| 2209 | data: any, |
| 2210 | ): Promise<{ |
| 2211 | text: string; |
| 2212 | images: AIImage[]; |
| 2213 | sources: Array<{ url: string; title?: string }>; |
| 2214 | }> => { |
| 2215 | if ( |
| 2216 | data && |
| 2217 | typeof data === "object" && |
| 2218 | !Buffer.isBuffer(data) && |
| 2219 | !(data instanceof Uint8Array) && |
| 2220 | !isAsyncIterable(data) |
| 2221 | ) { |
| 2222 | if (data?.object === "response") { |
| 2223 | return aggregateResponsesApiPayloads([data]); |
| 2224 | } |
| 2225 | return aggregateOpenAIResponses([data]); |
| 2226 | } |
| 2227 | |
| 2228 | const raw = await readResponseBodyAsText(data); |
| 2229 | const payloads = parseOpenAIResponsePayloads(raw); |
| 2230 | if (payloads.length > 0) { |
| 2231 | const hasResponsesPayload = payloads.some( |
| 2232 | (payload) => |
| 2233 | payload?.object === "response" || |
| 2234 | payload?.response?.object === "response" || |
| 2235 | (typeof payload?.type === "string" && |
| 2236 | payload.type.startsWith("response.")), |
| 2237 | ); |
| 2238 | return hasResponsesPayload |
| 2239 | ? aggregateResponsesApiPayloads(payloads) |
| 2240 | : aggregateOpenAIResponses(payloads); |
| 2241 | } |
| 2242 | |
| 2243 | return { text: raw.trim() || "AI 回复为空", images: [], sources: [] }; |
| 2244 | }; |
| 2245 | |
| 2246 | const buildDoubaoVideoUrl = (data: any): string | null => { |
| 2247 | return ( |
| 2248 | data?.data?.result?.video_url || |
no test coverage detected