copyBoundedInitializeInput function

({Map<String, dynamic> agentCapabilities, Map<String, dynamic> agentInfo, List<Map<String, dynamic>> authMethods}) copyBoundedInitializeInput({
  1. required Object? agentCapabilities,
  2. required Object? authMethods,
  3. Object? agentInfo,
  4. 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,
  );
}