remoteModel function

Model remoteModel({
  1. required String name,
  2. required String url,
  3. FutureOr<Map<String, String>?> headers(
    1. Map<String, dynamic> context
    )?,
  4. ModelInfo? info,
  5. Client? httpClient,
})

Defines a remote Genkit model.

Implementation

Model remoteModel({
  required String name,
  required String url,
  FutureOr<Map<String, String>?> Function(Map<String, dynamic> context)?
  headers,
  ModelInfo? info,
  http.Client? httpClient,
}) {
  final remoteAction =
      defineRemoteAction<ModelRequest, ModelResponse, ModelResponseChunk, void>(
        url: url,
        httpClient: httpClient,
        inputSchema: ModelRequest.$schema,
        outputSchema: ModelResponse.$schema,
        streamSchema: ModelResponseChunk.$schema,
      );

  return Model(
      name: name,
      fn: (request, context) async {
        final resolvedHeaders = await headers?.call(context.context ?? {});

        if (context.streamingRequested) {
          final stream = remoteAction.stream(
            input: request,
            headers: resolvedHeaders,
          );

          await for (final chunk in stream) {
            context.sendChunk(chunk);
          }

          return stream.result;
        }

        return await remoteAction(input: request, headers: resolvedHeaders);
      },
    )
    // A caller that omits [info] gets `modelMetadata`'s defaults. The
    // request is forwarded as-is either way; the serving side decides what to
    // do with an output schema.
    ..metadata.addAll(modelMetadata(name, info: info).metadata);
}