001package org.nasdanika.ai; 002 003import java.util.List; 004 005/** 006 * TextFloatVectorEmbeddingModel "business" interface focusing on ease of use and leaving 007 * token usage reporting to implementations. 008 */ 009public interface TextFloatVectorEmbeddingModel extends EmbeddingModel<String, List<List<Float>>>, TextEmbeddingGenerator<List<List<Float>>>, FloatVectorEmbeddingGenerator<String>, Model { 010 011 /** 012 * Creates TextFloatVectorEmbeddingModel requirement. 013 * String attributes match any value if null. 014 */ 015 static Requirement createRequirement( 016 String provider, 017 String model, 018 String version) { 019 020 return new Requirement( 021 String.class, 022 List.class, 023 TextFloatVectorEmbeddingModel.class::isAssignableFrom, 024 em -> { 025 TextFloatVectorEmbeddingModel tfvem = (TextFloatVectorEmbeddingModel) em; 026 if (model != null && !model.equals(tfvem.getName())) { 027 return false; 028 } 029 if (provider != null && !provider.equals(tfvem.getProvider())) { 030 return false; 031 } 032 return version == null || version.equals(tfvem.getVersion()); 033 }); 034 } 035 036 /** 037 * 038 * @param input 039 * @return true if the input is too long for a given model 040 */ 041 boolean isTooLong(String input); 042 043}