generateStream<Output, C> function

ActionStream<GenerateResponseChunk<Output>, GenerateResult<Output>> generateStream<Output, C>({
  1. required Model<C> model,
  2. String? system,
  3. String? prompt,
  4. List<Part>? promptParts,
  5. List<Message>? messages,
  6. C? config,
  7. List<Tool>? tools,
  8. List<String>? toolNames,
  9. ToolChoice? toolChoice,
  10. bool? returnToolRequests,
  11. int? maxTurns,
  12. SchemanticType<Output>? outputSchema,
  13. String? outputFormat,
  14. bool? outputConstrained,
  15. String? outputInstructions,
  16. bool? outputNoInstructions,
  17. String? outputContentType,
  18. Map<String, dynamic>? context,
  19. List<GenerateMiddleware>? use,
  20. CancellationToken? cancel,
  21. List<InterruptResponse>? interruptRespond,
  22. List<ToolRequestPart>? interruptRestart,
})

Streams a response from model; see generate.

Implementation

ActionStream<GenerateResponseChunk<Output>, GenerateResult<Output>>
generateStream<Output, C>({
  required Model<C> model,
  String? system,
  String? prompt,
  List<Part>? promptParts,
  List<Message>? messages,
  C? config,
  List<Tool>? tools,
  List<String>? toolNames,
  ToolChoice? toolChoice,
  bool? returnToolRequests,
  int? maxTurns,
  SchemanticType<Output>? outputSchema,
  String? outputFormat,
  bool? outputConstrained,
  String? outputInstructions,
  bool? outputNoInstructions,
  String? outputContentType,
  Map<String, dynamic>? context,
  List<GenerateMiddleware>? use,
  CancellationToken? cancel,
  List<InterruptResponse>? interruptRespond,
  List<ToolRequestPart>? interruptRestart,
}) {
  final chunks = StreamController<GenerateResponseChunk<Output>>();
  final result = generate<Output, C>(
    system: system,
    prompt: prompt,
    promptParts: promptParts,
    messages: messages,
    model: model,
    config: config,
    tools: tools,
    toolNames: toolNames,
    toolChoice: toolChoice,
    returnToolRequests: returnToolRequests,
    maxTurns: maxTurns,
    outputSchema: outputSchema,
    outputFormat: outputFormat,
    outputConstrained: outputConstrained,
    outputInstructions: outputInstructions,
    outputNoInstructions: outputNoInstructions,
    outputContentType: outputContentType,
    context: context,
    cancel: cancel,
    onChunk: (chunk) {
      if (!chunks.isClosed) chunks.add(chunk);
    },
    use: use,
    interruptRespond: interruptRespond,
    interruptRestart: interruptRestart,
  );
  // Close the chunk stream once generation settles, surfacing a failure on
  // the stream as well as on `onResult`.
  result.then(
    (_) => chunks.close(),
    onError: (Object e, StackTrace s) {
      chunks
        ..addError(e, s)
        ..close();
    },
  );
  return ActionStream.withResult(chunks.stream, result);
}