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}