---
rel_ver: 0.7.2
layout: release-notes
---

<!--
 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.
-->

<section id="overview">
    <h2 class="section-title">Overview <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
    <p>
        <a href="/download.html">NLPCraft 0.7.2</a> brings about several important bug fixes.
        First full public release of the new <a href="/tools/script.html"><code>nlpcraft.{sh|cmd}</code></a> management utility.
    </p>
</section>
<section id="new">
    <h2 class="section-title">🙌 New <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
    <ul>
        <li><a target="jira" href='https://issues.apache.org/jira/browse/NLPCRAFT-152'>NLPCRAFT-152</a> - Create 'project' command for <a href="/tools/script.html"><code>nlpcraft.{sh|cmd}</code></a> script.</li>
        <li><a target="jira" href='https://issues.apache.org/jira/browse/NLPCRAFT-153'>NLPCRAFT-153</a> - Create 'model' command for <a href="/tools/script.html"><code>nlpcraft.{sh|cmd}</code></a> script.</li>
        <li><a target="jira" href='https://issues.apache.org/jira/browse/NLPCRAFT-165'>NLPCRAFT-165</a> - Update website docs for new conversation syntax for terms.</li>
        <li><a target="jira" href='https://issues.apache.org/jira/browse/NLPCRAFT-164'>NLPCRAFT-164</a> - Remove KEYS file from source repo.</li>
        <li><a target="jira" href='https://issues.apache.org/jira/browse/NLPCRAFT-168'>NLPCRAFT-168</a> - Add 'sqlgen' command to <a href="/tools/script.html"><code>nlpcraft.{sh|cmd}</code></a> script.</li>
    </ul>
</section>
<section id="enhancements">
    <h2 class="section-title">🤖 Enhancements <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
    <ul>
        <li><a target="jira" href='https://issues.apache.org/jira/browse/NLPCRAFT-163'>NLPCRAFT-163</a> - Check that matched intent contains at least one token from current question (i.e. not all tokens are from STM).</li>
        <li><a target="jira" href='https://issues.apache.org/jira/browse/NLPCRAFT-166'>NLPCRAFT-166</a> - Model misses default constructor error.</li>
        <li><a target="jira" href='https://issues.apache.org/jira/browse/NLPCRAFT-171'>NLPCRAFT-171</a> - CLI stop server error.</li>
    </ul>
</section>
<section id="fixes">
    <h2 class="section-title">🧐 Fixes <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
    <ul>
        <li><a target="jira" href='https://issues.apache.org/jira/browse/NLPCRAFT-142'>NLPCRAFT-142</a> - Probe connected, but its models are not loaded.</li>
        <li><a target="jira" href='https://issues.apache.org/jira/browse/NLPCRAFT-161'>NLPCRAFT-161</a> - Conversation property should be added into term.</li>
        <li><a target="jira" href='https://issues.apache.org/jira/browse/NLPCRAFT-162'>NLPCRAFT-162</a> - CLI issues.</li>
    </ul>
</section>

