| 380 | ) |
| 381 | |
| 382 | const generateWith = (stream: Interface["stream"]) => |
| 383 | Effect.fn("LLM.generate")(function* (request: LLMRequest) { |
| 384 | const state = yield* stream(request).pipe(Stream.runFold(LLMResponse.empty, LLMResponse.reduce)) |
| 385 | const response = LLMResponse.complete(state) |
| 386 | if (response) return response |
| 387 | return yield* ProviderShared.eventError( |
| 388 | `${request.model.provider}/${request.model.route.id}`, |
| 389 | "Provider stream ended without a terminal finish event", |
| 390 | ) |
| 391 | }) |
| 392 | |
| 393 | export const prepare = <Body = unknown>(request: LLMRequest) => |
| 394 | prepareWith(request) as Effect.Effect<PreparedRequestOf<Body>, LLMError> |