copyBoundedInitializeInput function
({Map<String, dynamic> agentCapabilities, Map<String, dynamic> agentInfo, List<Map<String, dynamic> > authMethods})
copyBoundedInitializeInput({
- required Object? agentCapabilities,
- required Object? authMethods,
- Object? agentInfo,
- ChatInputBudget budget = const ChatInputBudget(),
Implementation
({
Map<String, dynamic> agentCapabilities,
List<Map<String, dynamic>> authMethods,
Map<String, dynamic> agentInfo,
})
copyBoundedInitializeInput({
required Object? agentCapabilities,
required Object? authMethods,
Object? agentInfo,
ChatInputBudget budget = const ChatInputBudget(),
}) {
budget.validate();
final List<dynamic> rawAuthMethods;
if (authMethods == null) {
rawAuthMethods = const <Object?>[];
} else if (authMethods is List) {
rawAuthMethods = authMethods;
} else {
throw const FormatException(
'ACP initialize auth methods must be a JSON array.',
);
}
final authMethodCount = rawAuthMethods.length;
if (authMethodCount > budget.maxAuthMethods) {
throw ChatInputLimitExceeded(
resource: 'ACP initialize auth methods',
limit: budget.maxAuthMethods,
observedAtLeast: authMethodCount,
);
}
final guard = ChatJsonInputGuard(
resource: 'ACP initialize input',
maxDepth: math.min(budget.maxJsonDepth, budget.maxCapabilityDepth),
maxNodes: budget.maxCapabilityNodes,
maxBytes: budget.maxCapabilityBytes,
);
final copiedAgentCapabilities = guard.copyMap(agentCapabilities);
final copiedAuthValues = guard.copyList(
_FixedLengthListView(rawAuthMethods, authMethodCount),
rootElementObjectError:
'ACP initialize auth methods must contain only JSON objects.',
);
final copiedAgentInfo = guard.copyMap(agentInfo);
final copiedAuthMethods = <Map<String, dynamic>>[];
for (final value in copiedAuthValues) {
copiedAuthMethods.add(value as Map<String, dynamic>);
}
return (
agentCapabilities: copiedAgentCapabilities,
authMethods: copiedAuthMethods,
agentInfo: copiedAgentInfo,
);
}