// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.config.model.api; import com.yahoo.config.application.api.ApplicationFile; import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.provision.ApplicationId; import java.net.URI; import java.util.Map; import java.util.Optional; /** * @author bjorncs */ public interface OnnxModelCost { Calculator newCalculator(ApplicationPackage appPkg, ApplicationId applicationId); interface Calculator { long aggregatedModelCostInBytes(); // TODO: Unused, remove when 8.263.7 is oldest model in use default void registerModel(ApplicationFile path) { registerModel(path, OnnxModelOptions.empty()); } void registerModel(ApplicationFile path, OnnxModelOptions onnxModelOptions); // TODO: Unused, remove when 8.263.7 is oldest model in use default void registerModel(URI uri) { registerModel(uri, OnnxModelOptions.empty()); } void registerModel(URI uri, OnnxModelOptions onnxModelOptions); Map models(); void setRestartOnDeploy(); boolean restartOnDeploy(); void store(); } record ModelInfo(String modelId, long estimatedCost, long hash, Optional onnxModelOptions) { public ModelInfo(String modelId, long estimatedCost, long hash, OnnxModelOptions onnxModelOptions) { this(modelId, estimatedCost, hash, Optional.of(onnxModelOptions)); } public OnnxModelOptions options() { return onnxModelOptions.orElseThrow(() -> new IllegalStateException("No onnxModelOptions exist")); } } static OnnxModelCost disabled() { return new DisabledOnnxModelCost(); } class DisabledOnnxModelCost implements OnnxModelCost, Calculator { @Override public Calculator newCalculator(ApplicationPackage appPkg, ApplicationId applicationId) { return this; } @Override public long aggregatedModelCostInBytes() {return 0;} @Override public void registerModel(ApplicationFile path, OnnxModelOptions onnxModelOptions) {} @Override public void registerModel(URI uri, OnnxModelOptions onnxModelOptions) {} @Override public Map models() { return Map.of(); } @Override public void setRestartOnDeploy() {} @Override public boolean restartOnDeploy() { return false; } @Override public void store() {} } }