run method

Future<RunResult<Output>> run(
  1. Input? input, {
  2. StreamingCallback<Chunk>? onChunk,
  3. Map<String, dynamic>? context,
  4. Stream<Input>? inputStream,
  5. Init? init,
  6. TraceStartCallback? onTraceStart,
})

Implementation

Future<RunResult<Output>> run(
  Input? input, {
  StreamingCallback<Chunk>? onChunk,
  Map<String, dynamic>? context,
  Stream<Input>? inputStream,
  Init? init,
  TraceStartCallback? onTraceStart,
}) async {
  if (inputStream == null) {
    final internalInputController = StreamController<Input>();
    inputStream = internalInputController.stream;
    if (input != null) {
      internalInputController.add(input);
    }
    internalInputController.close();
  }

  final executionContext = context ?? Zone.current[_genkitContextKey];
  Future<RunResult<Output>> runner() async {
    var traceId = '';
    var spanId = '';
    final result = await runInNewSpan(
      name,
      (telemetryContext) async {
        traceId = telemetryContext.traceId;
        spanId = telemetryContext.spanId;
        if (onTraceStart != null) {
          onTraceStart(traceId: traceId, spanId: spanId);
        }
        return await fn(input, (
          streamingRequested: onChunk != null,
          sendChunk: onChunk ?? (chunk) {},
          context: executionContext,
          inputStream: inputStream,
          init: init,
        ));
      },
      actionType: actionType,
      input: input,
    );
    return RunResult<Output>(
      result: result,
      traceId: traceId,
      spanId: spanId,
    );
  }

  if (context != null) {
    return runZoned(runner, zoneValues: {_genkitContextKey: context});
  } else {
    return runner();
  }
}