searchAssistants method

Future<List<Assistant>> searchAssistants({
  1. String? namePattern,
  2. String? model,
  3. List<String>? requiredTools,
  4. Map<String, String>? metadataFilters,
})

Search assistants by criteria

Implementation

Future<List<Assistant>> searchAssistants({
  String? namePattern,
  String? model,
  List<String>? requiredTools,
  Map<String, String>? metadataFilters,
}) async {
  final response = await listAssistants();
  var assistants = response.data;

  // Filter by name pattern
  if (namePattern != null) {
    final regex = RegExp(namePattern, caseSensitive: false);
    assistants = assistants
        .where((a) => a.name != null && regex.hasMatch(a.name!))
        .toList();
  }

  // Filter by model
  if (model != null) {
    assistants = assistants.where((a) => a.model == model).toList();
  }

  // Filter by required tools
  if (requiredTools != null && requiredTools.isNotEmpty) {
    assistants = assistants.where((a) {
      final assistantTools = a.tools.map((t) => t.type.value).toSet();
      return requiredTools.every((tool) => assistantTools.contains(tool));
    }).toList();
  }

  // Filter by metadata
  if (metadataFilters != null && metadataFilters.isNotEmpty) {
    assistants = assistants.where((a) {
      final metadata = a.metadata ?? <String, String>{};
      return metadataFilters.entries
          .every((filter) => metadata[filter.key] == filter.value);
    }).toList();
  }

  return assistants;
}