This is an automated email from the ASF dual-hosted git repository. sergeykamov pushed a commit to branch NLPCRAFT-500 in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
commit 9fa4af8b6d0a3304cb3516179b7f7ac3eee819fe Author: Sergey Kamov <[email protected]> AuthorDate: Thu Aug 25 13:14:50 2022 +0300 IDL fragments related fixes. --- .../internal/intent/compiler/NCIDLCompiler.scala | 11 ++--- .../compiler/NCIDLImportsOverridingSpec.scala | 56 ++++++++++++++++++++++ .../nlpcraft/internal/intent/compiler/imp1.idl | 23 +++++++++ .../nlpcraft/internal/intent/compiler/imp2.idl | 24 ++++++++++ 4 files changed, 108 insertions(+), 6 deletions(-) diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLCompiler.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLCompiler.scala index b403545d..e0c48480 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLCompiler.scala +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLCompiler.scala @@ -261,12 +261,11 @@ class NCIDLCompiler(cfg: NCModelConfig) extends LazyLogging with mutable.Cloneab fragCache.get(frag.id) match case Some(exFrag) => - if frag.terms != exFrag.terms then - // TODO: text - if isMethodLevel then - logger.warn(s"Fragment '${frag.id}' was overriden just for for origin: '${this.origin}'.") - else - logger.warn(s"Fragment '${frag.id}' was overriden in origin: '${this.origin}' permanently.") + // TODO: text + if isMethodLevel then + logger.warn(s"Fragment '${frag.id}' was overriden just for for origin: '${this.origin}'.") + else + logger.warn(s"Fragment '${frag.id}' was overriden in origin: '${this.origin}' permanently.") case None => // No-op. fragCache += frag.id -> frag diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLImportsOverridingSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLImportsOverridingSpec.scala new file mode 100644 index 00000000..0d58e858 --- /dev/null +++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLImportsOverridingSpec.scala @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nlpcraft.internal.intent.compiler + +import org.apache.nlpcraft.* +import org.apache.nlpcraft.annotations.{NCIntent, NCIntentRef} +import org.apache.nlpcraft.internal.impl.NCModelScanner +import org.apache.nlpcraft.nlp.parsers.NCSemanticTestElement as TE +import org.apache.nlpcraft.nlp.util.* +import org.junit.jupiter.api.Test + +import scala.util.Using + +class NCIDLImportsOverridingSpec: + @NCIntent("import('org/apache/nlpcraft/internal/intent/compiler/imp2.idl')") + class M extends NCTestModelAdapter: + // Uses fragment defined on imp2.idl, which overrides imp1.idl. + @NCIntent("intent=i2 fragment(f)") + private def on2(ctx: NCContext, im: NCIntentMatch): NCResult = NCResult(2) + + // Uses own fragment, which which overrides all. + @NCIntent("fragment=f term(z)~{# == 'x3'} intent=i3 fragment(f)") + private def on3(ctx: NCContext, im: NCIntentMatch): NCResult = NCResult(3) + + // Uses initial fragment version, defined in imp1.idl. + @NCIntent("import('org/apache/nlpcraft/internal/intent/compiler/imp1.idl')") + @NCIntentRef("i1") + private def on1(ctx: NCContext, im: NCIntentMatch): NCResult = NCResult(1) + + override val getPipeline: NCPipeline = + val pl = mkEnPipeline + pl.entParsers += NCTestUtils.mkEnSemanticParser(TE("x1"), TE("x2"), TE("x3")) + pl + + @Test + def test(): Unit = + Using.resource(new NCModelClient(new M())) { client => + require(client.ask("x1", "usr").getBody == 1) + require(client.ask("x2", "usr").getBody == 2) + require(client.ask("x3", "usr").getBody == 3) + } \ No newline at end of file diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/imp1.idl b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/imp1.idl new file mode 100644 index 00000000..e428c36c --- /dev/null +++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/imp1.idl @@ -0,0 +1,23 @@ + /* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// ============================ +// Test content. +// ============================ + +fragment=f term={# == 'x1'} +intent=i1 fragment(f) \ No newline at end of file diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/imp2.idl b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/imp2.idl new file mode 100644 index 00000000..f92ba03f --- /dev/null +++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/imp2.idl @@ -0,0 +1,24 @@ + /* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// ============================ +// Test content. +// ============================ + +import('org/apache/nlpcraft/internal/intent/compiler/imp1.idl') +// Overrides fragment. +fragment=f term={# == 'x2'}
