summaryrefslogtreecommitdiffstats
path: root/meta-offline-voice-agent/recipes-python
diff options
context:
space:
mode:
Diffstat (limited to 'meta-offline-voice-agent/recipes-python')
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-joblib/python3-joblib_1.2.0.bb14
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-numpy/python3-numpy/0001-Disable-runtimelibdirs-for-cross-compile.patch25
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-numpy/python3-numpy/0001-Remove-using-library-directories-as-runtime-library-.patch48
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-numpy/python3-numpy_%.bbappend6
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-python-crfsuite/python3-python-crfsuite_0.9.9.bb12
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-scikit-learn/files/0001-hack-around-numpy-get_include-to-force-looking-in-ta.patch563
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-scikit-learn/python3-scikit-learn_0.24.2.bb36
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-scipy/files/0001-Allow-passing-flags-via-FARCH-for-mach.patch44
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-scipy/files/static-lib.patch32
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-scipy/python3-beniget_0.4.1.bb11
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-scipy/python3-pythran_0.11.0.bb14
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-scipy/python3-scipy-native_1.8.1.bb44
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-scipy/python3-scipy_1.8.1.bb52
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-sklearn-crfsuite/python3-sklearn-crfsuite_0.3.6.bb27
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-num2words_0.5.12.bb16
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-pyaml_19.12.0.bb16
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-inference-agl_0.2.0.bb52
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-parsers-crates.inc176
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-parsers_0.4.3.bb25
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-utils-crates.inc64
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-utils_0.9.1.bb20
-rw-r--r--meta-offline-voice-agent/recipes-python/python3-threadpoolctl/python3-threadpoolctl_3.1.0.bb29
22 files changed, 1326 insertions, 0 deletions
diff --git a/meta-offline-voice-agent/recipes-python/python3-joblib/python3-joblib_1.2.0.bb b/meta-offline-voice-agent/recipes-python/python3-joblib/python3-joblib_1.2.0.bb
new file mode 100644
index 00000000..ce896fd4
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-joblib/python3-joblib_1.2.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Lightweight pipelining: using Python functions as pipeline jobs"
+HOMEPAGE = "https://github.com/joblib/joblib"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2e481820abf0a70a18011a30153df066"
+
+PYPI_PACKAGE = "joblib"
+
+SRC_URI[md5sum] = "928a19e66a10f6cda32fb004440c70fb"
+SRC_URI[sha256sum] = "e1cee4a79e4af22881164f218d4311f60074197fb707e082e803b61f6d137018"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "python3-pydoc"
+BBCLASSEXTEND = "native" \ No newline at end of file
diff --git a/meta-offline-voice-agent/recipes-python/python3-numpy/python3-numpy/0001-Disable-runtimelibdirs-for-cross-compile.patch b/meta-offline-voice-agent/recipes-python/python3-numpy/python3-numpy/0001-Disable-runtimelibdirs-for-cross-compile.patch
new file mode 100644
index 00000000..c96bb64d
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-numpy/python3-numpy/0001-Disable-runtimelibdirs-for-cross-compile.patch
@@ -0,0 +1,25 @@
+From 9729175ae0ee7b2c8641483b9dfd16051cc4ad23 Mon Sep 17 00:00:00 2001
+From: Greg Anders <greg@gpanders.com>
+Date: Mon, 2 Mar 2020 14:34:04 +0000
+Subject: [PATCH] Disable runtime_lib_dirs for cross compile
+
+---
+ numpy/distutils/system_info.py | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/numpy/distutils/system_info.py b/numpy/distutils/system_info.py
+index 28c7b92..d1a92ab 100644
+--- a/numpy/distutils/system_info.py
++++ b/numpy/distutils/system_info.py
+@@ -669,10 +669,7 @@ class system_info(object):
+ return self.get_paths(self.section, key)
+
+ def get_runtime_lib_dirs(self, key='runtime_library_dirs'):
+- path = self.get_paths(self.section, key)
+- if path == ['']:
+- path = []
+- return path
++ return []
+
+ def get_include_dirs(self, key='include_dirs'):
+ return self.get_paths(self.section, key) \ No newline at end of file
diff --git a/meta-offline-voice-agent/recipes-python/python3-numpy/python3-numpy/0001-Remove-using-library-directories-as-runtime-library-.patch b/meta-offline-voice-agent/recipes-python/python3-numpy/python3-numpy/0001-Remove-using-library-directories-as-runtime-library-.patch
new file mode 100644
index 00000000..d7e818a8
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-numpy/python3-numpy/0001-Remove-using-library-directories-as-runtime-library-.patch
@@ -0,0 +1,48 @@
+From b14d1c1b684014a65b8b7ea0030f7f070a34e6c5 Mon Sep 17 00:00:00 2001
+From: Scott Murray <scott.murray@konsulko.com>
+Date: Tue, 4 Jul 2023 10:24:11 -0400
+Subject: [PATCH] Remove using library directories as runtime library
+ directories
+
+The code in calc_libraries_info in distutils/system_info.py converts
+library directories to runtime library directories, which seems to
+only make sense in an environment when the external libraries are not
+coming from standard system locations. It is actively harmful in the
+OE build environment since it results in sysroot paths getting put
+into RPATH in the resulting binaries. Remove that snippet of code so
+that module .so's do not trigger the rpath QA sanity checking.
+
+Upstream-Status: Inappropriate
+
+Signed-off-by: Scott Murray <scott.murray@konsulko.com>
+---
+ numpy/distutils/system_info.py | 13 -------------
+ 1 file changed, 13 deletions(-)
+
+diff --git a/numpy/distutils/system_info.py b/numpy/distutils/system_info.py
+index 656bc37..fb075a1 100644
+--- a/numpy/distutils/system_info.py
++++ b/numpy/distutils/system_info.py
+@@ -728,19 +728,6 @@ class system_info:
+ else:
+ log.info('Library %s was not found. Ignoring' % (lib))
+
+- if r_dirs:
+- i = self.check_libs(r_dirs, [lib])
+- if i is not None:
+- # Swap library keywords found to runtime_library_dirs
+- # the libraries are insisting on the user having defined
+- # them using the library_dirs, and not necessarily by
+- # runtime_library_dirs
+- del i['libraries']
+- i['runtime_library_dirs'] = i.pop('library_dirs')
+- dict_append(info, **i)
+- else:
+- log.info('Runtime library %s was not found. Ignoring' % (lib))
+-
+ return info
+
+ def set_info(self, **info):
+--
+2.40.1
+
diff --git a/meta-offline-voice-agent/recipes-python/python3-numpy/python3-numpy_%.bbappend b/meta-offline-voice-agent/recipes-python/python3-numpy/python3-numpy_%.bbappend
new file mode 100644
index 00000000..b8d1f144
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-numpy/python3-numpy_%.bbappend
@@ -0,0 +1,6 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
+
+SRC_URI += " \
+ file://0001-Disable-runtimelibdirs-for-cross-compile.patch \
+ file://0001-Remove-using-library-directories-as-runtime-library-.patch \
+ "
diff --git a/meta-offline-voice-agent/recipes-python/python3-python-crfsuite/python3-python-crfsuite_0.9.9.bb b/meta-offline-voice-agent/recipes-python/python3-python-crfsuite/python3-python-crfsuite_0.9.9.bb
new file mode 100644
index 00000000..19fb4cf6
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-python-crfsuite/python3-python-crfsuite_0.9.9.bb
@@ -0,0 +1,12 @@
+SUMMARY = "A python binding for crfsuite"
+HOMEPAGE = "https://github.com/scrapinghub/python-crfsuite"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=0a36d267a3ece77cbc8ebc95ca7e2edd"
+
+PYPI_PACKAGE = "python-crfsuite"
+
+SRC_URI[md5sum] = "01691860ad087f1270a78062ba0ded4c"
+SRC_URI[sha256sum] = "caa6261d6955466756f986b7fcfbd4fd50622963e3bdb5cc180c129c62b3a76d"
+
+inherit pypi setuptools3
diff --git a/meta-offline-voice-agent/recipes-python/python3-scikit-learn/files/0001-hack-around-numpy-get_include-to-force-looking-in-ta.patch b/meta-offline-voice-agent/recipes-python/python3-scikit-learn/files/0001-hack-around-numpy-get_include-to-force-looking-in-ta.patch
new file mode 100644
index 00000000..bd0f9458
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-scikit-learn/files/0001-hack-around-numpy-get_include-to-force-looking-in-ta.patch
@@ -0,0 +1,563 @@
+From eed8f56c787a251a6cad0f4291ca8f4055e463cf Mon Sep 17 00:00:00 2001
+From: Jack Mitchell <ml@embed.me.uk>
+Date: Fri, 22 Jan 2021 10:16:08 +0000
+Subject: [PATCH] hack around numpy get_include to force looking in target
+ sysroot
+
+---
+ sklearn/__check_build/setup.py | 4 ++--
+ sklearn/cluster/setup.py | 12 ++++++------
+ sklearn/datasets/setup.py | 4 ++--
+ sklearn/decomposition/setup.py | 6 +++---
+ sklearn/ensemble/setup.py | 22 +++++++++++-----------
+ sklearn/feature_extraction/setup.py | 4 ++--
+ sklearn/linear_model/setup.py | 8 ++++----
+ sklearn/manifold/setup.py | 6 +++---
+ sklearn/metrics/cluster/setup.py | 4 ++--
+ sklearn/neighbors/setup.py | 15 +++++++--------
+ sklearn/preprocessing/setup.py | 4 ++--
+ sklearn/setup.py | 4 ++--
+ sklearn/svm/setup.py | 11 ++++++-----
+ sklearn/tree/setup.py | 10 +++++-----
+ sklearn/utils/setup.py | 16 ++++++++--------
+ 15 files changed, 65 insertions(+), 65 deletions(-)
+
+diff --git a/sklearn/__check_build/setup.py b/sklearn/__check_build/setup.py
+index b8c30d9c8..e2bfc90ee 100644
+--- a/sklearn/__check_build/setup.py
++++ b/sklearn/__check_build/setup.py
+@@ -1,7 +1,7 @@
+ # Author: Virgile Fritsch <virgile.fritsch@inria.fr>
+ # License: BSD 3 clause
+
+-import numpy
++import numpy, os
+
+
+ def configuration(parent_package='', top_path=None):
+@@ -9,7 +9,7 @@ def configuration(parent_package='', top_path=None):
+ config = Configuration('__check_build', parent_package, top_path)
+ config.add_extension('_check_build',
+ sources=['_check_build.pyx'],
+- include_dirs=[numpy.get_include()])
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]])
+
+ return config
+
+diff --git a/sklearn/cluster/setup.py b/sklearn/cluster/setup.py
+index 48ed25c5c..bd395e3aa 100644
+--- a/sklearn/cluster/setup.py
++++ b/sklearn/cluster/setup.py
+@@ -2,7 +2,7 @@
+ # License: BSD 3 clause
+ import os
+
+-import numpy
++import numpy, os
+
+
+ def configuration(parent_package='', top_path=None):
+@@ -16,28 +16,28 @@ def configuration(parent_package='', top_path=None):
+
+ config.add_extension('_dbscan_inner',
+ sources=['_dbscan_inner.pyx'],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ language="c++")
+
+ config.add_extension('_hierarchical_fast',
+ sources=['_hierarchical_fast.pyx'],
+ language="c++",
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_extension('_k_means_fast',
+ sources=['_k_means_fast.pyx'],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_extension('_k_means_lloyd',
+ sources=['_k_means_lloyd.pyx'],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_extension('_k_means_elkan',
+ sources=['_k_means_elkan.pyx'],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_subpackage('tests')
+diff --git a/sklearn/datasets/setup.py b/sklearn/datasets/setup.py
+index 1107505d4..de4ac3c87 100644
+--- a/sklearn/datasets/setup.py
++++ b/sklearn/datasets/setup.py
+@@ -1,5 +1,5 @@
+
+-import numpy
++import numpy, os
+ import os
+ import platform
+
+@@ -14,7 +14,7 @@ def configuration(parent_package='', top_path=None):
+ if platform.python_implementation() != 'PyPy':
+ config.add_extension('_svmlight_format_fast',
+ sources=['_svmlight_format_fast.pyx'],
+- include_dirs=[numpy.get_include()])
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]])
+ config.add_subpackage('tests')
+ return config
+
+diff --git a/sklearn/decomposition/setup.py b/sklearn/decomposition/setup.py
+index f915d6d78..26799c0af 100644
+--- a/sklearn/decomposition/setup.py
++++ b/sklearn/decomposition/setup.py
+@@ -1,5 +1,5 @@
+ import os
+-import numpy
++import numpy, os
+ from numpy.distutils.misc_util import Configuration
+
+
+@@ -12,12 +12,12 @@ def configuration(parent_package="", top_path=None):
+
+ config.add_extension("_online_lda_fast",
+ sources=["_online_lda_fast.pyx"],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_extension('_cdnmf_fast',
+ sources=['_cdnmf_fast.pyx'],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_subpackage("tests")
+diff --git a/sklearn/ensemble/setup.py b/sklearn/ensemble/setup.py
+index 05d71cf31..c12382220 100644
+--- a/sklearn/ensemble/setup.py
++++ b/sklearn/ensemble/setup.py
+@@ -1,4 +1,4 @@
+-import numpy
++import numpy, os
+ from numpy.distutils.misc_util import Configuration
+
+
+@@ -7,7 +7,7 @@ def configuration(parent_package="", top_path=None):
+
+ config.add_extension("_gradient_boosting",
+ sources=["_gradient_boosting.pyx"],
+- include_dirs=[numpy.get_include()])
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]])
+
+ config.add_subpackage("tests")
+
+@@ -15,39 +15,39 @@ def configuration(parent_package="", top_path=None):
+ config.add_extension(
+ "_hist_gradient_boosting._gradient_boosting",
+ sources=["_hist_gradient_boosting/_gradient_boosting.pyx"],
+- include_dirs=[numpy.get_include()])
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]])
+
+ config.add_extension("_hist_gradient_boosting.histogram",
+ sources=["_hist_gradient_boosting/histogram.pyx"],
+- include_dirs=[numpy.get_include()])
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]])
+
+ config.add_extension("_hist_gradient_boosting.splitting",
+ sources=["_hist_gradient_boosting/splitting.pyx"],
+- include_dirs=[numpy.get_include()])
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]])
+
+ config.add_extension("_hist_gradient_boosting._binning",
+ sources=["_hist_gradient_boosting/_binning.pyx"],
+- include_dirs=[numpy.get_include()])
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]])
+
+ config.add_extension("_hist_gradient_boosting._predictor",
+ sources=["_hist_gradient_boosting/_predictor.pyx"],
+- include_dirs=[numpy.get_include()])
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]])
+
+ config.add_extension("_hist_gradient_boosting._loss",
+ sources=["_hist_gradient_boosting/_loss.pyx"],
+- include_dirs=[numpy.get_include()])
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]])
+
+ config.add_extension("_hist_gradient_boosting._bitset",
+ sources=["_hist_gradient_boosting/_bitset.pyx"],
+- include_dirs=[numpy.get_include()])
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]])
+
+ config.add_extension("_hist_gradient_boosting.common",
+ sources=["_hist_gradient_boosting/common.pyx"],
+- include_dirs=[numpy.get_include()])
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]])
+
+ config.add_extension("_hist_gradient_boosting.utils",
+ sources=["_hist_gradient_boosting/utils.pyx"],
+- include_dirs=[numpy.get_include()])
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]])
+
+ config.add_subpackage("_hist_gradient_boosting.tests")
+
+diff --git a/sklearn/feature_extraction/setup.py b/sklearn/feature_extraction/setup.py
+index 8c3bbb100..a872c7603 100644
+--- a/sklearn/feature_extraction/setup.py
++++ b/sklearn/feature_extraction/setup.py
+@@ -3,7 +3,7 @@ import platform
+
+
+ def configuration(parent_package='', top_path=None):
+- import numpy
++ import numpy, os
+ from numpy.distutils.misc_util import Configuration
+
+ config = Configuration('feature_extraction', parent_package, top_path)
+@@ -14,7 +14,7 @@ def configuration(parent_package='', top_path=None):
+ if platform.python_implementation() != 'PyPy':
+ config.add_extension('_hashing_fast',
+ sources=['_hashing_fast.pyx'],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+ config.add_subpackage("tests")
+
+diff --git a/sklearn/linear_model/setup.py b/sklearn/linear_model/setup.py
+index d0c9e8c04..962340210 100644
+--- a/sklearn/linear_model/setup.py
++++ b/sklearn/linear_model/setup.py
+@@ -1,5 +1,5 @@
+ import os
+-import numpy
++import numpy, os
+
+ from sklearn._build_utils import gen_from_templates
+
+@@ -15,12 +15,12 @@ def configuration(parent_package='', top_path=None):
+
+ config.add_extension('_cd_fast',
+ sources=['_cd_fast.pyx'],
+- include_dirs=numpy.get_include(),
++ include_dirs=os.environ["NUMPY_INCLUDE_PATH"],
+ libraries=libraries)
+
+ config.add_extension('_sgd_fast',
+ sources=['_sgd_fast.pyx'],
+- include_dirs=numpy.get_include(),
++ include_dirs=os.environ["NUMPY_INCLUDE_PATH"],
+ libraries=libraries)
+
+ # generate sag_fast from template
+@@ -29,7 +29,7 @@ def configuration(parent_package='', top_path=None):
+
+ config.add_extension('_sag_fast',
+ sources=['_sag_fast.pyx'],
+- include_dirs=numpy.get_include())
++ include_dirs=os.environ["NUMPY_INCLUDE_PATH"])
+
+ # add other directories
+ config.add_subpackage('tests')
+diff --git a/sklearn/manifold/setup.py b/sklearn/manifold/setup.py
+index 0db2d5d04..959a4996a 100644
+--- a/sklearn/manifold/setup.py
++++ b/sklearn/manifold/setup.py
+@@ -1,6 +1,6 @@
+ import os
+
+-import numpy
++import numpy, os
+
+
+ def configuration(parent_package="", top_path=None):
+@@ -14,13 +14,13 @@ def configuration(parent_package="", top_path=None):
+
+ config.add_extension("_utils",
+ sources=["_utils.pyx"],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries,
+ extra_compile_args=["-O3"])
+
+ config.add_extension("_barnes_hut_tsne",
+ sources=["_barnes_hut_tsne.pyx"],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries,
+ extra_compile_args=['-O3'])
+
+diff --git a/sklearn/metrics/cluster/setup.py b/sklearn/metrics/cluster/setup.py
+index c39e414d9..98640b5f3 100644
+--- a/sklearn/metrics/cluster/setup.py
++++ b/sklearn/metrics/cluster/setup.py
+@@ -1,6 +1,6 @@
+ import os
+
+-import numpy
++import numpy, os
+ from numpy.distutils.misc_util import Configuration
+
+
+@@ -11,7 +11,7 @@ def configuration(parent_package="", top_path=None):
+ libraries.append('m')
+ config.add_extension("_expected_mutual_info_fast",
+ sources=["_expected_mutual_info_fast.pyx"],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_subpackage("tests")
+diff --git a/sklearn/neighbors/setup.py b/sklearn/neighbors/setup.py
+index 926404467..aeedcb940 100644
+--- a/sklearn/neighbors/setup.py
++++ b/sklearn/neighbors/setup.py
+@@ -2,7 +2,7 @@ import os
+
+
+ def configuration(parent_package='', top_path=None):
+- import numpy
++ import numpy, os
+ from numpy.distutils.misc_util import Configuration
+
+ config = Configuration('neighbors', parent_package, top_path)
+@@ -12,28 +12,27 @@ def configuration(parent_package='', top_path=None):
+
+ config.add_extension('_ball_tree',
+ sources=['_ball_tree.pyx'],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_extension('_kd_tree',
+ sources=['_kd_tree.pyx'],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_extension('_dist_metrics',
+ sources=['_dist_metrics.pyx'],
+- include_dirs=[numpy.get_include(),
+- os.path.join(numpy.get_include(),
+- 'numpy')],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"],
++ os.path.join(os.environ["NUMPY_INCLUDE_PATH"], 'numpy')],
+ libraries=libraries)
+
+ config.add_extension('_typedefs',
+ sources=['_typedefs.pyx'],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+ config.add_extension("_quad_tree",
+ sources=["_quad_tree.pyx"],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_subpackage('tests')
+diff --git a/sklearn/preprocessing/setup.py b/sklearn/preprocessing/setup.py
+index 29dae9b8f..7c059d90f 100644
+--- a/sklearn/preprocessing/setup.py
++++ b/sklearn/preprocessing/setup.py
+@@ -2,7 +2,7 @@ import os
+
+
+ def configuration(parent_package='', top_path=None):
+- import numpy
++ import numpy, os
+ from numpy.distutils.misc_util import Configuration
+
+ config = Configuration('preprocessing', parent_package, top_path)
+@@ -12,7 +12,7 @@ def configuration(parent_package='', top_path=None):
+
+ config.add_extension('_csr_polynomial_expansion',
+ sources=['_csr_polynomial_expansion.pyx'],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_subpackage('tests')
+diff --git a/sklearn/setup.py b/sklearn/setup.py
+index e5d7e6e26..a814bca87 100644
+--- a/sklearn/setup.py
++++ b/sklearn/setup.py
+@@ -6,7 +6,7 @@ from sklearn._build_utils import cythonize_extensions
+
+ def configuration(parent_package='', top_path=None):
+ from numpy.distutils.misc_util import Configuration
+- import numpy
++ import numpy, os
+
+ libraries = []
+ if os.name == 'posix':
+@@ -69,7 +69,7 @@ def configuration(parent_package='', top_path=None):
+ # add cython extension module for isotonic regression
+ config.add_extension('_isotonic',
+ sources=['_isotonic.pyx'],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries,
+ )
+
+diff --git a/sklearn/svm/setup.py b/sklearn/svm/setup.py
+index dffcff8eb..d01614780 100644
+--- a/sklearn/svm/setup.py
++++ b/sklearn/svm/setup.py
+@@ -1,6 +1,6 @@
+ import os
+ from os.path import join
+-import numpy
++import numpy, os
+
+
+ def configuration(parent_package='', top_path=None):
+@@ -13,7 +13,7 @@ def configuration(parent_package='', top_path=None):
+ # newrand wrappers
+ config.add_extension('_newrand',
+ sources=['_newrand.pyx'],
+- include_dirs=[numpy.get_include(),
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"],
+ join('src', 'newrand')],
+ depends=[join('src', 'newrand', 'newrand.h')],
+ language='c++',
+@@ -34,6 +34,7 @@ def configuration(parent_package='', top_path=None):
+ extra_link_args=['-lstdc++'],
+ # Use C++11 to use the random number generator fix
+ extra_compiler_args=['-std=c++11'],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ )
+
+ libsvm_sources = ['_libsvm.pyx']
+@@ -45,7 +46,7 @@ def configuration(parent_package='', top_path=None):
+
+ config.add_extension('_libsvm',
+ sources=libsvm_sources,
+- include_dirs=[numpy.get_include(),
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"],
+ join('src', 'libsvm'),
+ join('src', 'newrand')],
+ libraries=['libsvm-skl'],
+@@ -82,7 +83,7 @@ def configuration(parent_package='', top_path=None):
+ include_dirs=[join('.', 'src', 'liblinear'),
+ join('.', 'src', 'newrand'),
+ join('..', 'utils'),
+- numpy.get_include()],
++ os.environ["NUMPY_INCLUDE_PATH"]],
+ depends=liblinear_depends,
+ # extra_compile_args=['-O0 -fno-inline'],
+ )
+@@ -93,7 +94,7 @@ def configuration(parent_package='', top_path=None):
+ libsvm_sparse_sources = ['_libsvm_sparse.pyx']
+ config.add_extension('_libsvm_sparse', libraries=['libsvm-skl'],
+ sources=libsvm_sparse_sources,
+- include_dirs=[numpy.get_include(),
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"],
+ join("src", "libsvm"),
+ join("src", "newrand")],
+ depends=[join("src", "libsvm", "svm.h"),
+diff --git a/sklearn/tree/setup.py b/sklearn/tree/setup.py
+index 079ae9d86..0308a5cf9 100644
+--- a/sklearn/tree/setup.py
++++ b/sklearn/tree/setup.py
+@@ -1,6 +1,6 @@
+ import os
+
+-import numpy
++import numpy, os
+ from numpy.distutils.misc_util import Configuration
+
+
+@@ -11,22 +11,22 @@ def configuration(parent_package="", top_path=None):
+ libraries.append('m')
+ config.add_extension("_tree",
+ sources=["_tree.pyx"],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries,
+ extra_compile_args=["-O3"])
+ config.add_extension("_splitter",
+ sources=["_splitter.pyx"],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries,
+ extra_compile_args=["-O3"])
+ config.add_extension("_criterion",
+ sources=["_criterion.pyx"],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries,
+ extra_compile_args=["-O3"])
+ config.add_extension("_utils",
+ sources=["_utils.pyx"],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries,
+ extra_compile_args=["-O3"])
+
+diff --git a/sklearn/utils/setup.py b/sklearn/utils/setup.py
+index 098adeecc..d24e1b1c8 100644
+--- a/sklearn/utils/setup.py
++++ b/sklearn/utils/setup.py
+@@ -5,7 +5,7 @@ from sklearn._build_utils import gen_from_templates
+
+
+ def configuration(parent_package='', top_path=None):
+- import numpy
++ import numpy, os
+ from numpy.distutils.misc_util import Configuration
+
+ config = Configuration('utils', parent_package, top_path)
+@@ -24,7 +24,7 @@ def configuration(parent_package='', top_path=None):
+
+ config.add_extension('arrayfuncs',
+ sources=['arrayfuncs.pyx'],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_extension('murmurhash',
+@@ -34,12 +34,12 @@ def configuration(parent_package='', top_path=None):
+
+ config.add_extension('graph_shortest_path',
+ sources=['graph_shortest_path.pyx'],
+- include_dirs=[numpy.get_include()])
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]])
+
+ config.add_extension('_fast_dict',
+ sources=['_fast_dict.pyx'],
+ language="c++",
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_extension('_openmp_helpers',
+@@ -53,21 +53,21 @@ def configuration(parent_package='', top_path=None):
+
+ config.add_extension('_seq_dataset',
+ sources=['_seq_dataset.pyx'],
+- include_dirs=[numpy.get_include()])
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]])
+
+ config.add_extension('_weight_vector',
+ sources=['_weight_vector.pyx'],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_extension("_random",
+ sources=["_random.pyx"],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_extension("_logistic_sigmoid",
+ sources=["_logistic_sigmoid.pyx"],
+- include_dirs=[numpy.get_include()],
++ include_dirs=[os.environ["NUMPY_INCLUDE_PATH"]],
+ libraries=libraries)
+
+ config.add_subpackage('tests')
diff --git a/meta-offline-voice-agent/recipes-python/python3-scikit-learn/python3-scikit-learn_0.24.2.bb b/meta-offline-voice-agent/recipes-python/python3-scikit-learn/python3-scikit-learn_0.24.2.bb
new file mode 100644
index 00000000..64a532f0
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-scikit-learn/python3-scikit-learn_0.24.2.bb
@@ -0,0 +1,36 @@
+SUMMARY = "A set of python modules for machine learning and data mining"
+HOMEPAGE = "http://scikit-learn.org"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c8d7e027b3e67a2b1fe7fe85ebeb17d7"
+
+SRC_URI = "git://github.com/scikit-learn/scikit-learn.git;branch=0.24.X;protocol=https \
+ file://0001-hack-around-numpy-get_include-to-force-looking-in-ta.patch \
+ "
+SRCREV = "15a949460dbf19e5e196b8ef48f9712b72a3b3c3"
+S = "${WORKDIR}/git"
+
+DEPENDS += "python3-numpy-native python3-scipy-native python3-cython-native python3-numpy python3-scipy python3-cython"
+
+inherit setuptools3 pkgconfig python3-dir
+
+RDEPENDS:${PN} += "python3-numpy python3-scipy python3-joblib python3-threadpoolctl python3-pytest"
+
+export PYTHON_CROSSENV = "1"
+export SKLEARN_BUILD_PARALLEL = "${@oe.utils.cpu_count()}"
+export NPY_PKG_CONFIG_PATH = "${WORKDIR}/npy-pkg-config"
+export NUMPY_INCLUDE_PATH = "${STAGING_DIR_TARGET}/usr/lib/python${PYTHON_BASEVERSION}/site-packages/numpy/core/include"
+
+# Tell Numpy to look in target sysroot site-packages directory for libraries
+LDFLAGS:append = " -L${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages/numpy/core/lib"
+
+do_compile:prepend() {
+ echo "[ALL]" > ${S}/site.cfg
+ echo "library_dirs = ${STAGING_LIBDIR}" >> ${S}/site.cfg
+ echo "include_dirs = ${STAGING_INCDIR}" >> ${S}/site.cfg
+
+ mkdir -p ${WORKDIR}/npy-pkg-config
+ cp ${STAGING_DIR_TARGET}/usr/lib/python${PYTHON_BASEVERSION}/site-packages/numpy/core/lib/npy-pkg-config/* ${WORKDIR}/npy-pkg-config
+ sed -i 's&prefix=${pkgdir}&prefix=${STAGING_DIR_TARGET}/usr/lib/python${PYTHON_BASEVERSION}/site-packages/numpy/core&g' ${WORKDIR}/npy-pkg-config/npymath.ini
+ sed -i 's&prefix=${pkgdir}&prefix=${STAGING_DIR_TARGET}/usr/lib/python${PYTHON_BASEVERSION}/site-packages/numpy/core&g' ${WORKDIR}/npy-pkg-config/mlib.ini
+}
diff --git a/meta-offline-voice-agent/recipes-python/python3-scipy/files/0001-Allow-passing-flags-via-FARCH-for-mach.patch b/meta-offline-voice-agent/recipes-python/python3-scipy/files/0001-Allow-passing-flags-via-FARCH-for-mach.patch
new file mode 100644
index 00000000..8a874af4
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-scipy/files/0001-Allow-passing-flags-via-FARCH-for-mach.patch
@@ -0,0 +1,44 @@
+From 973767f29391eca1c76292556de03cdd7520c07d Mon Sep 17 00:00:00 2001
+From: Erik Boto <erik.boto@gmail.com>
+Date: Tue, 3 Nov 2020 09:08:56 -0700
+Subject: [PATCH] Allow passing flags via FARCH for mach
+
+Enable passing options via FARCH, so that the flags for setting the
+correct floating point ABI is propagated properly to the fortran
+compiler.
+
+This fixes an issue where the mach lib would otherwise be built as
+soft-float, even though the target arch is hard-float.
+---
+ scipy/integrate/setup.py | 3 +--
+ scipy/special/setup.py | 3 +--
+ 2 files changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/scipy/integrate/setup.py b/scipy/integrate/setup.py
+index 11ce3d1..8e4a3dc 100755
+--- a/scipy/integrate/setup.py
++++ b/scipy/integrate/setup.py
+@@ -34,8 +34,7 @@ def configuration(parent_package='',top_path=None):
+ quadpack_test_src = [join('tests','_test_multivariate.c')]
+ odeint_banded_test_src = [join('tests', 'banded5x5.f')]
+
+- config.add_library('mach', sources=mach_src, config_fc={'noopt': (__file__, 1)},
+- _pre_build_hook=pre_build_hook)
++ config.add_library('mach', sources=mach_src, _pre_build_hook=pre_build_hook)
+ config.add_library('quadpack', sources=quadpack_src, _pre_build_hook=pre_build_hook)
+ config.add_library('lsoda', sources=lsoda_src, _pre_build_hook=pre_build_hook)
+ config.add_library('vode', sources=vode_src, _pre_build_hook=pre_build_hook)
+diff --git a/scipy/special/setup.py b/scipy/special/setup.py
+index 81eb09f..260cfb3 100755
+--- a/scipy/special/setup.py
++++ b/scipy/special/setup.py
+@@ -46,8 +46,7 @@ def configuration(parent_package='',top_path=None):
+ amos_src = [join('amos','*.f')]
+ cdf_src = [join('cdflib','*.f')]
+ specfun_src = [join('specfun','*.f')]
+- config.add_library('sc_mach',sources=mach_src,
+- config_fc={'noopt':(__file__,1)})
++ config.add_library('sc_mach',sources=mach_src)
+ config.add_library('sc_amos',sources=amos_src)
+ config.add_library('sc_cdf',sources=cdf_src)
+ config.add_library('sc_specfun',sources=specfun_src)
diff --git a/meta-offline-voice-agent/recipes-python/python3-scipy/files/static-lib.patch b/meta-offline-voice-agent/recipes-python/python3-scipy/files/static-lib.patch
new file mode 100644
index 00000000..05b6133a
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-scipy/files/static-lib.patch
@@ -0,0 +1,32 @@
+diff --git a/scipy/stats/setup.py b/scipy/stats/setup.py
+index 52a5a36f0..fb5c16a6b 100644
+--- a/scipy/stats/setup.py
++++ b/scipy/stats/setup.py
+@@ -64,10 +64,10 @@ def configuration(parent_package='', top_path=None):
+ biasedurn_libs = []
+ biasedurn_libdirs = []
+ else:
+- biasedurn_libs = ['npyrandom', 'npymath']
+- biasedurn_libdirs = [join(np.get_include(),
+- '..', '..', 'random', 'lib')]
+- biasedurn_libdirs += get_info('npymath')['library_dirs']
++ biasedurn_libs = [join(os.environ["NUMPY_INCLUDE_PATH"],
++ '..', '..', 'random', 'lib', 'libnpyrandom.a')]
++ biasedurn_libs.append([join(os.environ["NUMPY_INCLUDE_PATH"],
++ '..', '..', 'core', 'lib', 'libnpymath.a')])
+
+ ext = config.add_extension(
+ '_biasedurn',
+@@ -79,11 +79,10 @@ def configuration(parent_package='', top_path=None):
+ 'biasedurn/stoc1.cpp',
+ 'biasedurn/stoc3.cpp'],
+ include_dirs=[np.get_include()],
+- library_dirs=biasedurn_libdirs,
+- libraries=biasedurn_libs,
+ define_macros=[('R_BUILD', None)],
+ language='c++',
+ depends=['biasedurn/stocR.h'],
++ extra_objects=biasedurn_libs,
+ )
+ ext._pre_build_hook = pre_build_hook
+
diff --git a/meta-offline-voice-agent/recipes-python/python3-scipy/python3-beniget_0.4.1.bb b/meta-offline-voice-agent/recipes-python/python3-scipy/python3-beniget_0.4.1.bb
new file mode 100644
index 00000000..cfd31447
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-scipy/python3-beniget_0.4.1.bb
@@ -0,0 +1,11 @@
+SUMMARY = "A static analyzer for Python2 and Python3 code"
+HOMEPAGE = "https://github.com/serge-sans-paille/beniget/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=02550c296a72ab0b70961eb70a5a7242"
+
+SRC_URI[md5sum] = "a2bbe7f17f10f9c127d8ef00692ddc55"
+SRC_URI[sha256sum] = "75554b3b8ad0553ce2f607627dad3d95c60c441189875b98e097528f8e23ac0c"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native"
diff --git a/meta-offline-voice-agent/recipes-python/python3-scipy/python3-pythran_0.11.0.bb b/meta-offline-voice-agent/recipes-python/python3-scipy/python3-pythran_0.11.0.bb
new file mode 100644
index 00000000..deabb9b5
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-scipy/python3-pythran_0.11.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Ahead of Time compiler for numeric kernels"
+HOMEPAGE = "https://pythran.readthedocs.io/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e277a0b6033e0cb3d510c86b74144b01"
+
+SRC_URI[md5sum] = "e09e90484771937ab499380858bdb18d"
+SRC_URI[sha256sum] = "0b2cba712e09f7630879dff69f268460bfe34a6d6000451b47d598558a92a875"
+
+DEPENDS += "python3-gast"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "python3-beniget python3-gast"
+BBCLASSEXTEND = "native"
diff --git a/meta-offline-voice-agent/recipes-python/python3-scipy/python3-scipy-native_1.8.1.bb b/meta-offline-voice-agent/recipes-python/python3-scipy/python3-scipy-native_1.8.1.bb
new file mode 100644
index 00000000..ca46f9db
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-scipy/python3-scipy-native_1.8.1.bb
@@ -0,0 +1,44 @@
+SUMMARY = "SciPy: Scientific Library for Python"
+HOMEPAGE = "https://www.scipy.org"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=27ca2e35416b6316570bf126e08b7062"
+
+SRC_URI = "https://pypi.python.org/packages/source/s/scipy/scipy-${PV}.tar.gz \
+ file://0001-Allow-passing-flags-via-FARCH-for-mach.patch \
+ "
+
+SRC_URI[md5sum] = "df5ce79288fc457238aeef18e8f70dfc"
+SRC_URI[sha256sum] = "9e3fb1b0e896f14a85aa9a28d5f755daaeeb54c897b746df7a55ccb02b340f33"
+
+S = "${WORKDIR}/scipy-${PV}"
+
+DEPENDS += " \
+ ${PYTHON_PN}-numpy-native \
+ ${PYTHON_PN}-pybind11-native \
+ ${PYTHON_PN}-pythran-native \
+ ${PYTHON_PN}-gast-native \
+ ${PYTHON_PN}-beniget-native \
+ ${PYTHON_PN}-ply-native \
+ lapack-native \
+"
+
+CLEANBROKEN = "1"
+
+inherit setuptools3 native
+
+export LAPACK = "${STAGING_LIBDIR}"
+export BLAS = "${STAGING_LIBDIR}"
+
+export F90 = "${FC}"
+
+# Numpy expects the LDSHARED env variable to point to a single
+# executable, but OE sets it to include some flags as well. So we split
+# the existing LDSHARED variable into the base executable and flags, and
+# prepend the flags into LDFLAGS
+LDFLAGS:prepend := "${@" ".join(d.getVar('LDSHARED', True).split()[1:])} "
+export LDSHARED := "${@d.getVar('LDSHARED', True).split()[0]}"
+
+# Tell Numpy to look in target sysroot site-packages directory for libraries
+LDFLAGS:append = " -L${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages/numpy/core/lib"
+
+INSANE_SKIP:${PN} = "already-stripped"
diff --git a/meta-offline-voice-agent/recipes-python/python3-scipy/python3-scipy_1.8.1.bb b/meta-offline-voice-agent/recipes-python/python3-scipy/python3-scipy_1.8.1.bb
new file mode 100644
index 00000000..2c9424e6
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-scipy/python3-scipy_1.8.1.bb
@@ -0,0 +1,52 @@
+SUMMARY = "SciPy: Scientific Library for Python"
+HOMEPAGE = "https://www.scipy.org"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=27ca2e35416b6316570bf126e08b7062"
+
+SRC_URI += " \
+ file://0001-Allow-passing-flags-via-FARCH-for-mach.patch \
+ file://static-lib.patch \
+"
+SRC_URI[md5sum] = "df5ce79288fc457238aeef18e8f70dfc"
+SRC_URI[sha256sum] = "9e3fb1b0e896f14a85aa9a28d5f755daaeeb54c897b746df7a55ccb02b340f33"
+
+DEPENDS += " \
+ ${PYTHON_PN}-numpy \
+ ${PYTHON_PN}-numpy-native \
+ ${PYTHON_PN}-pybind11-native \
+ ${PYTHON_PN}-pythran-native \
+ ${PYTHON_PN}-gast-native \
+ ${PYTHON_PN}-beniget-native \
+ ${PYTHON_PN}-ply-native \
+ lapack \
+"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+ ${PYTHON_PN}-numpy \
+ lapack \
+"
+
+CLEANBROKEN = "1"
+
+export LAPACK = "${STAGING_LIBDIR}"
+export BLAS = "${STAGING_LIBDIR}"
+
+export F90 = "${TARGET_PREFIX}gfortran"
+export F77 = "${TARGET_PREFIX}gfortran"
+export FARCH = "${TUNE_CCARGS}"
+
+export NUMPY_INCLUDE_PATH = "${STAGING_DIR_TARGET}/usr/lib/python${PYTHON_BASEVERSION}/site-packages/numpy/core/include"
+
+# Numpy expects the LDSHARED env variable to point to a single
+# executable, but OE sets it to include some flags as well. So we split
+# the existing LDSHARED variable into the base executable and flags, and
+# prepend the flags into LDFLAGS
+LDFLAGS:prepend := "${@" ".join(d.getVar('LDSHARED', True).split()[1:])} "
+export LDSHARED := "${@d.getVar('LDSHARED', True).split()[0]}"
+
+# Tell Numpy to look in target sysroot site-packages directory for libraries
+LDFLAGS:append = " -L${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages/numpy/core/lib"
+
+INSANE_SKIP:${PN} = "already-stripped"
diff --git a/meta-offline-voice-agent/recipes-python/python3-sklearn-crfsuite/python3-sklearn-crfsuite_0.3.6.bb b/meta-offline-voice-agent/recipes-python/python3-sklearn-crfsuite/python3-sklearn-crfsuite_0.3.6.bb
new file mode 100644
index 00000000..2991a33d
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-sklearn-crfsuite/python3-sklearn-crfsuite_0.3.6.bb
@@ -0,0 +1,27 @@
+SUMMARY = "scikit-learn inspired API for CRFsuite"
+HOMEPAGE = "https://github.com/TeamHG-Memex/sklearn-crfsuite"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://README.rst;md5=430135089e45e49b28e1cb481484db9a"
+
+PYPI_PACKAGE = "sklearn-crfsuite"
+
+SRC_URI[md5sum] = "14b51eb8a1195f2dc441a7164133008f"
+SRC_URI[sha256sum] = "2f59aad3055e01a778a79a6352891cac04788e8b52688aa5bc8b11be7717861e"
+
+DEPENDS += " \
+ python3-tabulate \
+ python3-python-crfsuite \
+ python3-six \
+ python3-tqdm \
+ python3-setuptools-native \
+ "
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+ python3-tabulate \
+ python3-python-crfsuite \
+ python3-six \
+ python3-tqdm \
+ "
diff --git a/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-num2words_0.5.12.bb b/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-num2words_0.5.12.bb
new file mode 100644
index 00000000..d1ca38fe
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-num2words_0.5.12.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Modules to convert numbers to words"
+HOMEPAGE = "https://github.com/savoirfairelinux/num2words"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f1b68565299e4b2403b8b3a87d0bcacf"
+
+PYPI_PACKAGE = "num2words"
+
+SRC_URI[md5sum] = "6ef51562822308f7e20f8059d2a81686"
+SRC_URI[sha256sum] = "7e7c0b0f080405aa3a1dd9d32b1ca90b3bf03bab17b8e54db05e1b78301a0988"
+
+DEPENDS += "python3-docopt python3-setuptools-native"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "python3-docopt"
+BBCLASSEXTEND = "native" \ No newline at end of file
diff --git a/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-pyaml_19.12.0.bb b/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-pyaml_19.12.0.bb
new file mode 100644
index 00000000..6cfc34df
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-pyaml_19.12.0.bb
@@ -0,0 +1,16 @@
+SUMMARY = "PyYAML-based module to produce a bit more pretty and readable YAML-serialized data"
+HOMEPAGE = "https://github.com/mk-fg/pretty-yaml"
+LICENSE = "WTFPL"
+LIC_FILES_CHKSUM = "file://COPYING;md5=cb6845a9953333608b280507d7803cb3"
+
+PYPI_PACKAGE = "pyaml"
+
+SRC_URI[md5sum] = "a41620eeb64f4b460e6d23b98156780e"
+SRC_URI[sha256sum] = "b3f636b467864319d7ded1558f86bb305b8612a274f5d443a62dc5eceb1b7176"
+
+DEPENDS += "python3-pyyaml python3-setuptools-native"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "python3-pyyaml"
+BBCLASSEXTEND = "native" \ No newline at end of file
diff --git a/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-inference-agl_0.2.0.bb b/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-inference-agl_0.2.0.bb
new file mode 100644
index 00000000..df18ac53
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-inference-agl_0.2.0.bb
@@ -0,0 +1,52 @@
+SUMMARY = "Inference only module of Snips NLU library"
+HOMEPAGE = "https://github.com/malik727/snips-inference-agl"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ecab3ce0771d366e0f8e4ca058eb48e7"
+
+SRC_URI += " \
+ git://github.com/malik727/snips-inference-agl.git;protocol=https;branch=main \
+ "
+
+PV = "0.2.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+SRCREV = "6d45b8d814b1937251524dd8a1e8cac0d8cab5de"
+
+DEPENDS += " \
+ python3-setuptools-native \
+ python3-numpy-native \
+ python3-numpy \
+ python3-num2words \
+ python3-pyaml \
+ python3-six \
+ python3-requests \
+ python3-deprecation \
+ python3-future \
+ python3-scipy \
+ python3-scikit-learn \
+ python3-threadpoolctl \
+ python3-sklearn-crfsuite \
+ python3-tqdm \
+ python3-packaging \
+ python3-snips-nlu-utils \
+ python3-snips-nlu-parsers \
+ "
+
+inherit setuptools3
+
+RDEPENDS:${PN} += " \
+ python3-numpy \
+ python3-num2words \
+ python3-pyaml \
+ python3-six \
+ python3-requests \
+ python3-deprecation \
+ python3-future \
+ python3-scipy \
+ python3-scikit-learn \
+ python3-threadpoolctl \
+ python3-sklearn-crfsuite \
+ python3-tqdm \
+ python3-packaging \
+ python3-snips-nlu-utils \
+ python3-snips-nlu-parsers \
+ "
diff --git a/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-parsers-crates.inc b/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-parsers-crates.inc
new file mode 100644
index 00000000..dbdbf384
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-parsers-crates.inc
@@ -0,0 +1,176 @@
+# Autogenerated with 'bitbake -c update_crates python3-snips-nlu-parsers'
+
+# from Cargo.lock
+SRC_URI += " \
+ crate://crates.io/addr2line/0.19.0 \
+ crate://crates.io/adler/1.0.2 \
+ crate://crates.io/aho-corasick/1.0.2 \
+ crate://crates.io/autocfg/1.1.0 \
+ crate://crates.io/backtrace/0.3.67 \
+ crate://crates.io/bitflags/1.3.2 \
+ crate://crates.io/bumpalo/3.13.0 \
+ crate://crates.io/byteorder/1.4.3 \
+ crate://crates.io/cc/1.0.79 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/chrono/0.4.8 \
+ crate://crates.io/derive-new/0.5.9 \
+ crate://crates.io/either/1.8.1 \
+ crate://crates.io/enum_primitive/0.1.1 \
+ crate://crates.io/errno/0.3.1 \
+ crate://crates.io/errno-dragonfly/0.1.2 \
+ crate://crates.io/failure/0.1.8 \
+ crate://crates.io/failure_derive/0.1.8 \
+ crate://crates.io/fastrand/1.9.0 \
+ crate://crates.io/fnv/1.0.7 \
+ crate://crates.io/gimli/0.27.3 \
+ crate://crates.io/hermit-abi/0.3.1 \
+ crate://crates.io/instant/0.1.12 \
+ crate://crates.io/io-lifetimes/1.0.11 \
+ crate://crates.io/itertools/0.8.2 \
+ crate://crates.io/itoa/1.0.6 \
+ crate://crates.io/js-sys/0.3.64 \
+ crate://crates.io/lazy_static/1.4.0 \
+ crate://crates.io/libc/0.2.146 \
+ crate://crates.io/linux-raw-sys/0.3.8 \
+ crate://crates.io/log/0.4.19 \
+ crate://crates.io/maybe-uninit/2.0.0 \
+ crate://crates.io/memchr/2.5.0 \
+ crate://crates.io/miniz_oxide/0.6.2 \
+ crate://crates.io/num-integer/0.1.45 \
+ crate://crates.io/num-traits/0.1.43 \
+ crate://crates.io/num-traits/0.2.15 \
+ crate://crates.io/object/0.30.4 \
+ crate://crates.io/once_cell/1.18.0 \
+ crate://crates.io/paste/1.0.12 \
+ crate://crates.io/proc-macro2/1.0.63 \
+ crate://crates.io/quote/1.0.28 \
+ crate://crates.io/redox_syscall/0.3.5 \
+ crate://crates.io/regex/1.8.4 \
+ crate://crates.io/regex-syntax/0.7.2 \
+ crate://crates.io/rmp/0.8.11 \
+ crate://crates.io/rmp-serde/0.13.7 \
+ crate://crates.io/rmp-serde/0.14.4 \
+ crate://crates.io/rustc-demangle/0.1.23 \
+ crate://crates.io/rustix/0.37.20 \
+ crate://crates.io/ryu/1.0.13 \
+ crate://crates.io/serde/1.0.164 \
+ crate://crates.io/serde_derive/1.0.164 \
+ crate://crates.io/serde_json/1.0.99 \
+ crate://crates.io/smallvec/0.6.14 \
+ crate://crates.io/string-interner/0.7.1 \
+ crate://crates.io/syn/1.0.109 \
+ crate://crates.io/syn/2.0.22 \
+ crate://crates.io/synstructure/0.12.6 \
+ crate://crates.io/tempfile/3.6.0 \
+ crate://crates.io/time/0.1.45 \
+ crate://crates.io/tinyvec/1.6.0 \
+ crate://crates.io/tinyvec_macros/0.1.1 \
+ crate://crates.io/unicode-ident/1.0.9 \
+ crate://crates.io/unicode-normalization/0.1.22 \
+ crate://crates.io/unicode-xid/0.2.4 \
+ crate://crates.io/vec_map/0.8.2 \
+ crate://crates.io/wasi/0.10.0+wasi-snapshot-preview1 \
+ crate://crates.io/wasm-bindgen/0.2.87 \
+ crate://crates.io/wasm-bindgen-backend/0.2.87 \
+ crate://crates.io/wasm-bindgen-macro/0.2.87 \
+ crate://crates.io/wasm-bindgen-macro-support/0.2.87 \
+ crate://crates.io/wasm-bindgen-shared/0.2.87 \
+ crate://crates.io/winapi/0.3.9 \
+ crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+ crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
+ crate://crates.io/windows-sys/0.48.0 \
+ crate://crates.io/windows-targets/0.48.0 \
+ crate://crates.io/windows_aarch64_gnullvm/0.48.0 \
+ crate://crates.io/windows_aarch64_msvc/0.48.0 \
+ crate://crates.io/windows_i686_gnu/0.48.0 \
+ crate://crates.io/windows_i686_msvc/0.48.0 \
+ crate://crates.io/windows_x86_64_gnu/0.48.0 \
+ crate://crates.io/windows_x86_64_gnullvm/0.48.0 \
+ crate://crates.io/windows_x86_64_msvc/0.48.0 \
+"
+
+SRC_URI[addr2line-0.19.0.sha256sum] = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+SRC_URI[adler-1.0.2.sha256sum] = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+SRC_URI[aho-corasick-1.0.2.sha256sum] = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[backtrace-0.3.67.sha256sum] = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[bumpalo-3.13.0.sha256sum] = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+SRC_URI[byteorder-1.4.3.sha256sum] = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+SRC_URI[cc-1.0.79.sha256sum] = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[chrono-0.4.8.sha256sum] = "27429a03ca54100bf6bdc726c09adc46a74187ac93f9ce96dc7aaa9594ebf707"
+SRC_URI[derive-new-0.5.9.sha256sum] = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535"
+SRC_URI[either-1.8.1.sha256sum] = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+SRC_URI[enum_primitive-0.1.1.sha256sum] = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180"
+SRC_URI[errno-0.3.1.sha256sum] = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+SRC_URI[errno-dragonfly-0.1.2.sha256sum] = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+SRC_URI[failure-0.1.8.sha256sum] = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
+SRC_URI[failure_derive-0.1.8.sha256sum] = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
+SRC_URI[fastrand-1.9.0.sha256sum] = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+SRC_URI[fnv-1.0.7.sha256sum] = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+SRC_URI[gimli-0.27.3.sha256sum] = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
+SRC_URI[hermit-abi-0.3.1.sha256sum] = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+SRC_URI[instant-0.1.12.sha256sum] = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+SRC_URI[io-lifetimes-1.0.11.sha256sum] = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+SRC_URI[itertools-0.8.2.sha256sum] = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
+SRC_URI[itoa-1.0.6.sha256sum] = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+SRC_URI[js-sys-0.3.64.sha256sum] = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+SRC_URI[libc-0.2.146.sha256sum] = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+SRC_URI[linux-raw-sys-0.3.8.sha256sum] = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+SRC_URI[log-0.4.19.sha256sum] = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+SRC_URI[maybe-uninit-2.0.0.sha256sum] = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+SRC_URI[memchr-2.5.0.sha256sum] = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+SRC_URI[miniz_oxide-0.6.2.sha256sum] = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+SRC_URI[num-integer-0.1.45.sha256sum] = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+SRC_URI[num-traits-0.1.43.sha256sum] = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
+SRC_URI[num-traits-0.2.15.sha256sum] = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+SRC_URI[object-0.30.4.sha256sum] = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385"
+SRC_URI[once_cell-1.18.0.sha256sum] = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+SRC_URI[paste-1.0.12.sha256sum] = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"
+SRC_URI[proc-macro2-1.0.63.sha256sum] = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
+SRC_URI[quote-1.0.28.sha256sum] = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
+SRC_URI[redox_syscall-0.3.5.sha256sum] = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+SRC_URI[regex-1.8.4.sha256sum] = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f"
+SRC_URI[regex-syntax-0.7.2.sha256sum] = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
+SRC_URI[rmp-0.8.11.sha256sum] = "44519172358fd6d58656c86ab8e7fbc9e1490c3e8f14d35ed78ca0dd07403c9f"
+SRC_URI[rmp-serde-0.13.7.sha256sum] = "011e1d58446e9fa3af7cdc1fb91295b10621d3ac4cb3a85cc86385ee9ca50cd3"
+SRC_URI[rmp-serde-0.14.4.sha256sum] = "4ce7d70c926fe472aed493b902010bccc17fa9f7284145cb8772fd22fdb052d8"
+SRC_URI[rustc-demangle-0.1.23.sha256sum] = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+SRC_URI[rustix-0.37.20.sha256sum] = "b96e891d04aa506a6d1f318d2771bcb1c7dfda84e126660ace067c9b474bb2c0"
+SRC_URI[ryu-1.0.13.sha256sum] = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+SRC_URI[serde-1.0.164.sha256sum] = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
+SRC_URI[serde_derive-1.0.164.sha256sum] = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
+SRC_URI[serde_json-1.0.99.sha256sum] = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3"
+SRC_URI[smallvec-0.6.14.sha256sum] = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
+SRC_URI[string-interner-0.7.1.sha256sum] = "fd710eadff449a1531351b0e43eb81ea404336fa2f56c777427ab0e32a4cf183"
+SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+SRC_URI[syn-2.0.22.sha256sum] = "2efbeae7acf4eabd6bcdcbd11c92f45231ddda7539edc7806bd1a04a03b24616"
+SRC_URI[synstructure-0.12.6.sha256sum] = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+SRC_URI[tempfile-3.6.0.sha256sum] = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6"
+SRC_URI[time-0.1.45.sha256sum] = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+SRC_URI[tinyvec-1.6.0.sha256sum] = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+SRC_URI[tinyvec_macros-0.1.1.sha256sum] = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+SRC_URI[unicode-ident-1.0.9.sha256sum] = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
+SRC_URI[unicode-normalization-0.1.22.sha256sum] = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+SRC_URI[unicode-xid-0.2.4.sha256sum] = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+SRC_URI[vec_map-0.8.2.sha256sum] = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+SRC_URI[wasi-0.10.0+wasi-snapshot-preview1.sha256sum] = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+SRC_URI[wasm-bindgen-0.2.87.sha256sum] = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+SRC_URI[wasm-bindgen-backend-0.2.87.sha256sum] = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+SRC_URI[wasm-bindgen-macro-0.2.87.sha256sum] = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+SRC_URI[wasm-bindgen-macro-support-0.2.87.sha256sum] = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+SRC_URI[wasm-bindgen-shared-0.2.87.sha256sum] = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+SRC_URI[windows-sys-0.48.0.sha256sum] = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+SRC_URI[windows-targets-0.48.0.sha256sum] = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+SRC_URI[windows_aarch64_gnullvm-0.48.0.sha256sum] = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+SRC_URI[windows_aarch64_msvc-0.48.0.sha256sum] = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+SRC_URI[windows_i686_gnu-0.48.0.sha256sum] = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+SRC_URI[windows_i686_msvc-0.48.0.sha256sum] = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+SRC_URI[windows_x86_64_gnu-0.48.0.sha256sum] = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+SRC_URI[windows_x86_64_gnullvm-0.48.0.sha256sum] = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+SRC_URI[windows_x86_64_msvc-0.48.0.sha256sum] = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
diff --git a/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-parsers_0.4.3.bb b/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-parsers_0.4.3.bb
new file mode 100644
index 00000000..d7ced8eb
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-parsers_0.4.3.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Python wrapper of the snips-nlu-parsers Rust crate"
+HOMEPAGE = "https://github.com/snipsco/snips-nlu-parsers"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = " \
+ file://../LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
+ file://../LICENSE-MIT;md5=b377b220f43d747efdec40d69fcaa69d \
+ "
+
+SRC_URI += " \
+ git://github.com/snipsco/snips-nlu-parsers;protocol=https;branch=master \
+ "
+
+PV = "0.4.3+git${SRCPV}"
+SRCREV = "8cfdae50437732fcf906af90626c8db196729d30"
+S = "${WORKDIR}/git/python"
+
+DEPENDS += "python3-future python3-setuptools-rust-native"
+
+require ${BPN}-crates.inc
+
+inherit cargo python_setuptools3_rust
+
+do_compile[network] = "1"
+
+RDEPENDS:${PN} += "python3-future"
diff --git a/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-utils-crates.inc b/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-utils-crates.inc
new file mode 100644
index 00000000..5338492d
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-utils-crates.inc
@@ -0,0 +1,64 @@
+# Autogenerated with 'bitbake -c update_crates python3-snips-nlu-utils'
+
+# from Cargo.lock
+SRC_URI += " \
+ crate://crates.io/addr2line/0.19.0 \
+ crate://crates.io/adler/1.0.2 \
+ crate://crates.io/aho-corasick/1.0.2 \
+ crate://crates.io/backtrace/0.3.67 \
+ crate://crates.io/cc/1.0.79 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/either/1.8.1 \
+ crate://crates.io/failure/0.1.8 \
+ crate://crates.io/failure_derive/0.1.8 \
+ crate://crates.io/fnv/1.0.7 \
+ crate://crates.io/gimli/0.27.3 \
+ crate://crates.io/itertools/0.8.2 \
+ crate://crates.io/lazy_static/1.4.0 \
+ crate://crates.io/libc/0.2.146 \
+ crate://crates.io/memchr/2.5.0 \
+ crate://crates.io/miniz_oxide/0.6.2 \
+ crate://crates.io/object/0.30.4 \
+ crate://crates.io/proc-macro2/1.0.63 \
+ crate://crates.io/quote/1.0.28 \
+ crate://crates.io/regex/1.8.4 \
+ crate://crates.io/regex-syntax/0.7.2 \
+ crate://crates.io/rustc-demangle/0.1.23 \
+ crate://crates.io/syn/1.0.109 \
+ crate://crates.io/synstructure/0.12.6 \
+ crate://crates.io/tinyvec/1.6.0 \
+ crate://crates.io/tinyvec_macros/0.1.1 \
+ crate://crates.io/unicode-ident/1.0.9 \
+ crate://crates.io/unicode-normalization/0.1.22 \
+ crate://crates.io/unicode-xid/0.2.4 \
+"
+
+SRC_URI[addr2line-0.19.0.sha256sum] = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+SRC_URI[adler-1.0.2.sha256sum] = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+SRC_URI[aho-corasick-1.0.2.sha256sum] = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
+SRC_URI[backtrace-0.3.67.sha256sum] = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+SRC_URI[cc-1.0.79.sha256sum] = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[either-1.8.1.sha256sum] = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+SRC_URI[failure-0.1.8.sha256sum] = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
+SRC_URI[failure_derive-0.1.8.sha256sum] = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
+SRC_URI[fnv-1.0.7.sha256sum] = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+SRC_URI[gimli-0.27.3.sha256sum] = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
+SRC_URI[itertools-0.8.2.sha256sum] = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
+SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+SRC_URI[libc-0.2.146.sha256sum] = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+SRC_URI[memchr-2.5.0.sha256sum] = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+SRC_URI[miniz_oxide-0.6.2.sha256sum] = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+SRC_URI[object-0.30.4.sha256sum] = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385"
+SRC_URI[proc-macro2-1.0.63.sha256sum] = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
+SRC_URI[quote-1.0.28.sha256sum] = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
+SRC_URI[regex-1.8.4.sha256sum] = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f"
+SRC_URI[regex-syntax-0.7.2.sha256sum] = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
+SRC_URI[rustc-demangle-0.1.23.sha256sum] = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+SRC_URI[synstructure-0.12.6.sha256sum] = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+SRC_URI[tinyvec-1.6.0.sha256sum] = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+SRC_URI[tinyvec_macros-0.1.1.sha256sum] = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+SRC_URI[unicode-ident-1.0.9.sha256sum] = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
+SRC_URI[unicode-normalization-0.1.22.sha256sum] = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+SRC_URI[unicode-xid-0.2.4.sha256sum] = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
diff --git a/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-utils_0.9.1.bb b/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-utils_0.9.1.bb
new file mode 100644
index 00000000..491e4633
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-snips-inference/python3-snips-nlu-utils_0.9.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Python wrapper of rust library for NLU utils with wrappers in other languages"
+HOMEPAGE = "https://github.com/snipsco/snips-nlu-utils"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://../LICENSE;md5=fdebc354a9200f9dc847e624d4584ea9"
+
+SRC_URI += " \
+ git://github.com/malik727/snips-nlu-utils.git;protocol=https;branch=master \
+ "
+
+PV = "0.9.1+git${SRCPV}"
+S = "${WORKDIR}/git/python"
+SRCREV = "b632934413bf84a733cd745db33a0c83640eada8"
+
+DEPENDS += "python3-setuptools-rust-native"
+
+require ${BPN}-crates.inc
+
+inherit cargo python_setuptools3_rust
+
+do_compile[network] = "1" \ No newline at end of file
diff --git a/meta-offline-voice-agent/recipes-python/python3-threadpoolctl/python3-threadpoolctl_3.1.0.bb b/meta-offline-voice-agent/recipes-python/python3-threadpoolctl/python3-threadpoolctl_3.1.0.bb
new file mode 100644
index 00000000..9fed3639
--- /dev/null
+++ b/meta-offline-voice-agent/recipes-python/python3-threadpoolctl/python3-threadpoolctl_3.1.0.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Python helpers to limit the number of threads used \
+ in native libraries that handle their own internal threadpool"
+HOMEPAGE = "https://github.com/joblib/threadpoolctl"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8f2439cfddfbeebdb5cac3ae4ae80eaf"
+
+PYPI_PACKAGE = "threadpoolctl"
+
+SRC_URI[md5sum] = "e278b89038d9c9b39e7afafb8f5f87a3"
+SRC_URI[sha256sum] = "a335baacfaa4400ae1f0d8e3a58d6674d2f8828e3716bb2802c44955ad391380"
+
+DEPENDS += "python3-flit-core python3-setuptools-native"
+
+inherit pypi setuptools3
+
+do_configure:prepend() {
+cat > ${S}/setup.py <<-EOF
+from setuptools import setup
+
+setup(
+ name="${PYPI_PACKAGE}",
+ version="${PV}",
+ license="${LICENSE}",
+)
+EOF
+}
+
+RDEPENDS:${PN} += "python3-flit-core"
+BBCLASSEXTEND = "native" \ No newline at end of file