diff --git a/README.md b/README.md index ec9b7399..17b609a9 100644 --- a/README.md +++ b/README.md @@ -25,11 +25,11 @@ If you are already signed to GitHub in your project, just add any of these lines to add Prinz dependencies to your `.sbt` project ```sbt -"pl.touk.nussknacker.prinz" %% "prinz" % "1.2.0-preview-staging-2021-12-21" -"pl.touk.nussknacker.prinz" %% "prinz-mlflow" % "1.2.0-preview-staging-2021-12-21" -"pl.touk.nussknacker.prinz" %% "prinz-pmml" % "1.2.0-preview-staging-2021-12-21" -"pl.touk.nussknacker.prinz" %% "prinz-h2o" % "1.2.0-preview-staging-2021-12-21" -"pl.touk.nussknacker.prinz" %% "prinz-proxy" % "1.2.0-preview-staging-2021-12-21" +"pl.touk.nussknacker.prinz" %% "prinz" % "1.2.0-preview-staging-2022-03-14" +"pl.touk.nussknacker.prinz" %% "prinz-mlflow" % "1.2.0-preview-staging-2022-03-14" +"pl.touk.nussknacker.prinz" %% "prinz-pmml" % "1.2.0-preview-staging-2022-03-14" +"pl.touk.nussknacker.prinz" %% "prinz-h2o" % "1.2.0-preview-staging-2022-03-14" +"pl.touk.nussknacker.prinz" %% "prinz-proxy" % "1.2.0-preview-staging-2022-03-14" ``` ## Authors diff --git a/build.sbt b/build.sbt index cfad7a0a..9d760728 100755 --- a/build.sbt +++ b/build.sbt @@ -1,6 +1,6 @@ import sbtassembly.MergeStrategy -val prinzV = "1.2.0-preview-staging-2021-12-21" +val prinzV = "1.2.0-preview-staging-2022-03-14" val prinzOrg = "pl.touk.nussknacker.prinz" val repositoryOwner = "prinz-nussknacker" val repositoryName = "prinz" @@ -13,7 +13,7 @@ val scalatestV = "3.2.2" val minioS3V = "8.0.0" val circeV = "0.14.1" val circeYamlV = "0.11.0-M1" -val jpmmlV = "1.5.11" +val jpmmlV = "1.6.3" val jpmmlTranspilerV = "1.1.7" val testContainersV = "0.38.8" val paradiseV = "2.1.1" @@ -23,6 +23,9 @@ val logbackV = "1.2.3" val h2V = "1.4.200" val jsoupV = "1.13.1" val h2oV = "3.32.0.5" +val jaxbV = "3.0.0" +val jakartaV = "3.0.0" + ThisBuild / scalaVersion := scalaV ThisBuild / versionScheme := Some("semver-spec") @@ -117,7 +120,6 @@ lazy val prinz = (project in file("prinz")) libraryDependencies ++= { Seq( "com.typesafe" % "config" % typesafeConfigV, - "org.jsoup" % "jsoup" % jsoupV, "org.scalatest" %% "scalatest" % scalatestV % Test, @@ -165,10 +167,11 @@ lazy val prinz_pmml = (project in file("prinz_pmml")) libraryDependencies ++= { Seq( "org.jpmml" % "pmml-evaluator" % jpmmlV, - "org.jpmml" % "pmml-evaluator-extension" % jpmmlV, "org.jpmml" % "pmml-model" % jpmmlV, "org.jpmml" % "jpmml-transpiler" % jpmmlTranspilerV, "org.jsoup" % "jsoup" % jsoupV, + "jakarta.xml.bind" % "jakarta.xml.bind-api" % jakartaV, + "com.sun.xml.bind" % "jaxb-impl" % jaxbV, ) } ) diff --git a/dev-environment/create_environment.sh b/dev-environment/create_environment.sh index aca9857b..7abe6825 100755 --- a/dev-environment/create_environment.sh +++ b/dev-environment/create_environment.sh @@ -1,7 +1,7 @@ #!/bin/bash scalaV="2.12" -prinzV="1.2.0-preview-staging-2021-12-21" +prinzV="1.2.0-preview-staging-2022-03-14" COMP_FILES="" ENV_FILE="-f docker-compose-env.yaml" diff --git a/dev-environment/docker-compose-env.yaml b/dev-environment/docker-compose-env.yaml index 113d0de3..813f37d2 100644 --- a/dev-environment/docker-compose-env.yaml +++ b/dev-environment/docker-compose-env.yaml @@ -22,7 +22,7 @@ services: # this is needed to be able to verify savepoints during deployments - storage_flink:/opt/flink/data - ./nussknacker/opt/prinz-sample/prinz.conf:/opt/nussknacker/conf/prinz.conf - - ./nussknacker/opt/prinz-sample/prinz-sample-assembly-1.2.0-preview-staging-2021-12-21.jar:/opt/prinz-sample/prinz-sample.jar + - ./nussknacker/opt/prinz-sample/prinz-sample-assembly-1.2.0-preview-staging-2022-03-14.jar:/opt/prinz-sample/prinz-sample.jar networks: - dev-bridge-net diff --git a/prinz/src/main/scala/pl/touk/nussknacker/prinz/engine/PrinzEnricher.scala b/prinz/src/main/scala/pl/touk/nussknacker/prinz/engine/PrinzEnricher.scala index 34264cef..137ca4e3 100644 --- a/prinz/src/main/scala/pl/touk/nussknacker/prinz/engine/PrinzEnricher.scala +++ b/prinz/src/main/scala/pl/touk/nussknacker/prinz/engine/PrinzEnricher.scala @@ -24,7 +24,7 @@ final case class PrinzEnricher(private val model: Model) collector: InvocationCollectors.ServiceInvocationCollector, contextId: ContextId, metaData: MetaData): Future[Any] = { - val inputMap = createInputMap(params.values.toList) + val inputMap = createInputMap(params) modelInstance.run(inputMap).map { case Right(runResult) => runResult case Left(exc) => throw exc @@ -43,6 +43,7 @@ final case class PrinzEnricher(private val model: Model) .signature .toOutputTypedObjectTypingResult - def createInputMap(inputs: List[Any]): ModelInputData = - VectorMultimap(parameters.map(_.name) zip inputs) + def createInputMap(inputs: Map[String, Any]): ModelInputData = + VectorMultimap(parameters.map{p => (p.name, inputs.getOrElse(p.name, throw new IllegalArgumentException(s"Missing param: ${p.name}.")))}) + } diff --git a/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLModel.scala b/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLModel.scala index 00b38d37..ba82b339 100644 --- a/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLModel.scala +++ b/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLModel.scala @@ -1,8 +1,7 @@ package pl.touk.nussknacker.prinz.pmml.model -import org.jpmml.evaluator.{Evaluator, LoadingModelEvaluatorBuilder, PMMLException} import pl.touk.nussknacker.prinz.model.SignatureProvider.ProvideSignatureResult -import pl.touk.nussknacker.prinz.model.{Model, ModelInstance, ModelName, ModelNotValidException, ModelSignatureLocationMetadata, ModelVersion} +import pl.touk.nussknacker.prinz.model.{Model, ModelInstance, ModelName, ModelSignatureLocationMetadata, ModelVersion} import pl.touk.nussknacker.prinz.pmml.model.PMMLModel.extractName import pl.touk.nussknacker.prinz.pmml.repository.PMMLModelPayload diff --git a/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLModelEvaluatorExtractor.scala b/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLModelEvaluatorExtractor.scala index e3eb1f59..cd79c99d 100644 --- a/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLModelEvaluatorExtractor.scala +++ b/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLModelEvaluatorExtractor.scala @@ -1,6 +1,7 @@ package pl.touk.nussknacker.prinz.pmml.model -import org.jpmml.evaluator.{Evaluator, LoadingModelEvaluatorBuilder, PMMLException} +import org.jpmml.evaluator.{Evaluator, LoadingModelEvaluatorBuilder} +import org.jpmml.model.PMMLException import pl.touk.nussknacker.prinz.model.ModelNotValidException import pl.touk.nussknacker.prinz.pmml.repository.PMMLModelPayload import pl.touk.nussknacker.prinz.util.resource.ResourceManager diff --git a/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLModelInstance.scala b/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLModelInstance.scala index 686e4bab..7f26e3cd 100644 --- a/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLModelInstance.scala +++ b/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLModelInstance.scala @@ -1,7 +1,8 @@ package pl.touk.nussknacker.prinz.pmml.model import com.typesafe.scalalogging.LazyLogging -import org.jpmml.evaluator.{Evaluator, EvaluatorUtil, PMMLException} +import org.jpmml.evaluator.{Evaluator, EvaluatorUtil} +import org.jpmml.model.PMMLException import pl.touk.nussknacker.engine.util.SynchronousExecutionContext.ctx import pl.touk.nussknacker.prinz.model.ModelInstance.{ModelInputData, ModelRunResult} import pl.touk.nussknacker.prinz.model.{ModelInstance, ModelRunException} @@ -28,9 +29,8 @@ case class PMMLModelInstance(private val evaluator: Evaluator, } def evaluateRow(row: Map[String, Any]): Map[String, _] = { - val args = EvaluatorUtil.encodeKeys(row.asJava) - val results = evaluator.evaluate(args) - val decodeResult = EvaluatorUtil.decodeAll(results).asScala.toMap + val args = evaluator.evaluate(row.asJava) + val decodeResult = EvaluatorUtil.decodeAll(args).asScala.toMap decodeResult } diff --git a/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLSignatureProvider.scala b/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLSignatureProvider.scala index aaa2108b..db29a2cc 100644 --- a/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLSignatureProvider.scala +++ b/prinz_pmml/src/main/scala/pl/touk/nussknacker/prinz/pmml/model/PMMLSignatureProvider.scala @@ -1,8 +1,11 @@ package pl.touk.nussknacker.prinz.pmml.model -import org.jpmml.evaluator.{LoadingModelEvaluatorBuilder, ModelField, PMMLException} -import pl.touk.nussknacker.prinz.model.{ModelNotValidException, ModelSignature, ModelSignatureLocationMetadata, - SignatureField, SignatureName, SignatureProvider, SignatureType} +import org.jpmml.evaluator.{LoadingModelEvaluatorBuilder, ModelField} +import org.jpmml.model.PMMLException +import pl.touk.nussknacker.prinz.model.{ + ModelNotValidException, ModelSignature, ModelSignatureLocationMetadata, + SignatureField, SignatureName, SignatureProvider, SignatureType +} import pl.touk.nussknacker.prinz.pmml.converter.PMMLSignatureInterpreter.fromPMMLDataType import pl.touk.nussknacker.prinz.util.resource.ResourceManager @@ -30,7 +33,7 @@ object PMMLSignatureProvider extends SignatureProvider { private def modelFieldToSignatureField(modelField: ModelField): SignatureField = SignatureField( - SignatureName(modelField.getName.toString), + SignatureName(modelField.getName), SignatureType(fromPMMLDataType(modelField.getDataType.toString)) ) }