remoteModel function
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);
}