001package org.nasdanika.ai.cli; 002 003import org.nasdanika.ai.Embeddings; 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 EmbeddingsArgGroup implements ServiceRequirementProvider<Embeddings.Requirement, Embeddings> { 016 017 @Option( 018 names = "--embeddings-provider", 019 description = "Embeddings provider") 020 private String embeddingsProvider; 021 022 @Option( 023 names = "--embeddings-model", 024 description = "Embeddings model") 025 private String embeddingsModel; 026 027 @Option( 028 names = "--embeddings-version", 029 description = "Embeddings version") 030 private String embeddingsVersion; 031 032 /** 033 * @return An instance of requirement 034 */ 035 public Embeddings.Requirement getEmbeddingsRequirement() { 036 return new Embeddings.Requirement(embeddingsProvider, embeddingsModel, embeddingsVersion); 037 } 038 039 @Override 040 public ServiceCapabilityFactory.Requirement<Embeddings.Requirement, Embeddings> getServiceRequirement() { 041 return ServiceCapabilityFactory.createRequirement(Embeddings.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}