001package org.nasdanika.ai.cli;
002
003import org.nasdanika.ai.TextFloatVectorEmbeddingModel;
004import org.nasdanika.capability.ServiceCapabilityFactory;
005import org.nasdanika.capability.ServiceRequirementProvider;
006import org.nasdanika.common.Util;
007
008import io.opentelemetry.api.trace.Span;
009import picocli.CommandLine.Option;
010
011/**
012 * This arguments group is used to 
013 * create a requirement for embeddings.
014 */
015public class TextFloatVectorEmbeddingsArgGroup implements ServiceRequirementProvider<TextFloatVectorEmbeddingModel.Requirement, TextFloatVectorEmbeddingModel> {
016        
017        @Option( 
018                        names = "--embeddings-provider",
019                        description = "TextFloatVectorEmbeddingModel provider")
020        private String embeddingsProvider;
021        
022        @Option( 
023                        names = "--embeddings-model",
024                        description = "TextFloatVectorEmbeddingModel model")
025        private String embeddingsModel;
026        
027        @Option( 
028                        names = "--embeddings-version",
029                        description = "TextFloatVectorEmbeddingModel version")
030        private String embeddingsVersion;
031        
032        /**
033         * @return An instance of requirement
034         */
035        public TextFloatVectorEmbeddingModel.Requirement getEmbeddingsRequirement() {
036                return TextFloatVectorEmbeddingModel.createRequirement(embeddingsProvider, embeddingsModel, embeddingsVersion);
037        }
038        
039        @Override
040        public ServiceCapabilityFactory.Requirement<TextFloatVectorEmbeddingModel.Requirement, TextFloatVectorEmbeddingModel> getServiceRequirement() {
041                return ServiceCapabilityFactory.createRequirement(TextFloatVectorEmbeddingModel.class, null, getEmbeddingsRequirement());                               
042        }
043        
044        public void setSpanAttributes(Span span) {
045                if (!Util.isBlank(embeddingsProvider)) {
046                        span.setAttribute("embedings.provider", embeddingsProvider);
047                }
048                if (!Util.isBlank(embeddingsModel)) {
049                        span.setAttribute("embedings.model", embeddingsModel);
050                }
051                if (!Util.isBlank(embeddingsVersion)) {
052                        span.setAttribute("embedings.version", embeddingsVersion);
053                }               
054        }
055
056}