isToolSearchEnabled method

Future<bool> isToolSearchEnabled({
  1. required String model,
  2. required List<ToolDefinition> tools,
  3. required int contextWindow,
  4. String? source,
})

Check if tool search is enabled for a specific request.

This is the definitive check that includes model compatibility, ToolSearchTool availability, and threshold check for auto mode.

Implementation

Future<bool> isToolSearchEnabled({
  required String model,
  required List<ToolDefinition> tools,
  required int contextWindow,
  String? source,
}) async {
  if (!modelSupportsToolReference(model)) {
    _logDebug(
      'Tool search disabled for model \'$model\': '
      'model does not support tool_reference blocks.',
    );
    return false;
  }

  if (!isToolSearchToolAvailable(tools)) {
    _logDebug('Tool search disabled: ToolSearchTool is not available.');
    return false;
  }

  final currentMode = getToolSearchMode();

  switch (currentMode) {
    case ToolSearchMode.tst:
      return true;

    case ToolSearchMode.tstAuto:
      final result = _checkAutoThreshold(
        tools: tools,
        model: model,
        contextWindow: contextWindow,
      );
      if (result.enabled) {
        _logDebug(
          'Auto tool search enabled: ${result.debugDescription}'
          '${source != null ? ' [source: $source]' : ''}',
        );
      } else {
        _logDebug(
          'Auto tool search disabled: ${result.debugDescription}'
          '${source != null ? ' [source: $source]' : ''}',
        );
      }
      return result.enabled;

    case ToolSearchMode.standard:
      return false;
  }
}