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? modelInfo,
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 {
if (request == null) {
throw ArgumentError('Model request cannot be null');
}
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);
},
)
..metadata.addAll(
modelMetadata(
name,
modelInfo:
modelInfo ??
ModelInfo(
supports: {
'multiturn': true,
'media': true,
'tools': true,
'toolChoice': true,
'systemRole': true,
'constrained': true,
},
),
).metadata,
);
}