naeural-client 2.1.1__py3-none-any.whl → 2.1.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
naeural_client/_ver.py CHANGED
@@ -1,4 +1,4 @@
1
- __VER__ = "2.1.1"
1
+ __VER__ = "2.1.3"
2
2
 
3
3
  if __name__ == "__main__":
4
4
  with open("pyproject.toml", "rt") as fd:
@@ -1717,13 +1717,49 @@ class GenericSession(BaseDecentrAIObject):
1717
1717
  *,
1718
1718
  node,
1719
1719
  name,
1720
- signature=PLUGIN_SIGNATURES.CUSTOM_WEB_APP_01,
1720
+ signature=PLUGIN_SIGNATURES.TELEGRAM_BASIC_BOT_01,
1721
1721
  message_handler=None,
1722
1722
  telegram_bot_token=None,
1723
1723
  telegram_bot_token_env_key=ENVIRONMENT.TELEGRAM_BOT_TOKEN_ENV_KEY,
1724
+ telegram_bot_name=None,
1725
+ telegram_bot_name_env_key=ENVIRONMENT.TELEGRAM_BOT_NAME_ENV_KEY,
1724
1726
  **kwargs
1725
1727
  ):
1728
+ """
1729
+ Create a new basic Telegram bot on a node.
1730
+
1731
+ Parameters
1732
+ ----------
1726
1733
 
1734
+ node : str
1735
+ Address or Name of the Naeural Edge Protocol edge node that will handle this Telegram bot.
1736
+
1737
+ name : str
1738
+ Name of the Telegram bot.
1739
+
1740
+ signature : str, optional
1741
+ The signature of the plugin that will be used. Defaults to PLUGIN_SIGNATURES.TELEGRAM_BASIC_BOT_01.
1742
+
1743
+ message_handler : callable, optional
1744
+ The message handler function that will be called when a message is received. Defaults to None.
1745
+
1746
+ telegram_bot_token : str, optional
1747
+ The Telegram bot token. Defaults to None.
1748
+
1749
+ telegram_bot_token_env_key : str, optional
1750
+ The environment variable key that holds the Telegram bot token. Defaults to ENVIRONMENT.TELEGRAM_BOT_TOKEN_ENV_KEY.
1751
+
1752
+ telegram_bot_name : str, optional
1753
+ The Telegram bot name. Defaults to None.
1754
+
1755
+ telegram_bot_name_env_key : str, optional
1756
+ The environment variable key that holds the Telegram bot name. Defaults to ENVIRONMENT.TELEGRAM_BOT_NAME_ENV_KEY.
1757
+
1758
+ Returns
1759
+ -------
1760
+ tuple
1761
+ `Pipeline` and a `Instance` objects tuple.
1762
+ """
1727
1763
  assert callable(message_handler), "The `message_handler` method parameter must be provided."
1728
1764
 
1729
1765
  if telegram_bot_token is None:
@@ -1731,6 +1767,12 @@ class GenericSession(BaseDecentrAIObject):
1731
1767
  if telegram_bot_token is None:
1732
1768
  message = f"Warning! No Telegram bot token provided as via env {ENVIRONMENT.TELEGRAM_BOT_TOKEN_ENV_KEY} or explicitly as `telegram_bot_token` param."
1733
1769
  raise ValueError(message)
1770
+
1771
+ if telegram_bot_name is None:
1772
+ telegram_bot_name = os.getenv(telegram_bot_name_env_key)
1773
+ if telegram_bot_name is None:
1774
+ message = f"Warning! No Telegram bot name provided as via env {ENVIRONMENT.TELEGRAM_BOT_NAME_ENV_KEY} or explicitly as `telegram_bot_name` param."
1775
+ raise ValueError(message)
1734
1776
 
1735
1777
 
1736
1778
  pipeline: Pipeline = self.create_pipeline(
@@ -1741,12 +1783,15 @@ class GenericSession(BaseDecentrAIObject):
1741
1783
 
1742
1784
  func_name, func_args, func_base64_code = pipeline._get_method_data(message_handler)
1743
1785
  if len(func_args) != 2:
1744
- raise ValueError("The message handler function must have exactly 2 arguments: `instance` and `data`.")
1786
+ raise ValueError("The message handler function must have exactly 3 arguments: `plugin`, `message` and `user`.")
1745
1787
 
1788
+ obfuscated_token = telegram_bot_token[:4] + "*" * (len(telegram_bot_token) - 4)
1789
+ self.P(f"Creating telegram bot {telegram_bot_name} with token {obfuscated_token}...", color='b')
1746
1790
  instance = pipeline.create_plugin_instance(
1747
1791
  signature=signature,
1748
1792
  instance_id=self.log.get_unique_id(),
1749
1793
  telegram_bot_token=telegram_bot_token,
1794
+ telegram_bot_name=telegram_bot_name,
1750
1795
  message_handler=func_base64_code,
1751
1796
  message_handler_args=func_args, # mandatory message and user
1752
1797
  message_handler_name=func_name, # not mandatory
@@ -1754,6 +1799,115 @@ class GenericSession(BaseDecentrAIObject):
1754
1799
  )
1755
1800
  return pipeline, instance
1756
1801
 
1802
+
1803
+ def create_telegram_conversational_bot(
1804
+ self,
1805
+ *,
1806
+ node,
1807
+ name,
1808
+ signature=PLUGIN_SIGNATURES.TELEGRAM_CONVERSATIONAL_BOT_01,
1809
+ telegram_bot_token=None,
1810
+ telegram_bot_token_env_key=ENVIRONMENT.TELEGRAM_BOT_TOKEN_ENV_KEY,
1811
+ telegram_bot_name=None,
1812
+ telegram_bot_name_env_key=ENVIRONMENT.TELEGRAM_BOT_NAME_ENV_KEY,
1813
+
1814
+ system_prompt=None,
1815
+ agent_type="API",
1816
+ api_token_env_key=ENVIRONMENT.TELEGRAM_API_AGENT_TOKEN_ENV_KEY,
1817
+ api_token=None,
1818
+ rag_source_url=None,
1819
+ **kwargs
1820
+ ):
1821
+
1822
+ """
1823
+ Create a new conversational Telegram bot on a node.
1824
+
1825
+ Parameters
1826
+ ----------
1827
+
1828
+ node : str
1829
+ Address or Name of the Naeural Edge Protocol edge node that will handle this Telegram bot.
1830
+
1831
+ name : str
1832
+ Name of the Telegram bot.
1833
+
1834
+ signature : str, optional
1835
+ The signature of the plugin that will be used. Defaults to PLUGIN_SIGNATURES.TELEGRAM_BASIC_BOT_01.
1836
+
1837
+ telegram_bot_token : str, optional
1838
+ The Telegram bot token. Defaults to None.
1839
+
1840
+ telegram_bot_token_env_key : str, optional
1841
+ The environment variable key that holds the Telegram bot token. Defaults to ENVIRONMENT.TELEGRAM_BOT_TOKEN_ENV_KEY.
1842
+
1843
+ telegram_bot_name : str, optional
1844
+ The Telegram bot name. Defaults to None.
1845
+
1846
+ telegram_bot_name_env_key : str, optional
1847
+ The environment variable key that holds the Telegram bot name. Defaults to ENVIRONMENT.TELEGRAM_BOT_NAME_ENV_KEY.
1848
+
1849
+ system_prompt : str, optional
1850
+ The system prompt. Defaults to None.
1851
+
1852
+ agent_type : str, optional
1853
+ The agent type. Defaults to "API".
1854
+
1855
+ api_token_env_key : str, optional
1856
+ The environment variable key that holds the API token. Defaults to ENVIRONMENT.TELEGRAM_API_AGENT_TOKEN_ENV_KEY.
1857
+
1858
+ api_token : str, optional
1859
+ The API token. Defaults to None.
1860
+
1861
+ rag_source_url : str, optional
1862
+ The RAG database source URL upon which the bot will be able to generate responses. Defaults to None.
1863
+
1864
+ Returns
1865
+ -------
1866
+ tuple
1867
+ `Pipeline` and a `Instance` objects tuple.
1868
+ """
1869
+ if agent_type == "API":
1870
+ if api_token is None:
1871
+ api_token = os.getenv(api_token_env_key)
1872
+ if api_token is None:
1873
+ message = f"Warning! No API token provided as via env {ENVIRONMENT.TELEGRAM_API_AGENT_TOKEN_ENV_KEY} or explicitly as `api_token` param."
1874
+ raise ValueError(message)
1875
+
1876
+ if telegram_bot_token is None:
1877
+ telegram_bot_token = os.getenv(telegram_bot_token_env_key)
1878
+ if telegram_bot_token is None:
1879
+ message = f"Warning! No Telegram bot token provided as via env {ENVIRONMENT.TELEGRAM_BOT_TOKEN_ENV_KEY} or explicitly as `telegram_bot_token` param."
1880
+ raise ValueError(message)
1881
+
1882
+ if telegram_bot_name is None:
1883
+ telegram_bot_name = os.getenv(telegram_bot_name_env_key)
1884
+ if telegram_bot_name is None:
1885
+ message = f"Warning! No Telegram bot name provided as via env {ENVIRONMENT.TELEGRAM_BOT_NAME_ENV_KEY} or explicitly as `telegram_bot_name` param."
1886
+ raise ValueError(message)
1887
+
1888
+
1889
+ pipeline: Pipeline = self.create_pipeline(
1890
+ node=node,
1891
+ name=name,
1892
+ # default TYPE is "Void"
1893
+ )
1894
+
1895
+
1896
+ obfuscated_token = telegram_bot_token[:4] + "*" * (len(telegram_bot_token) - 4)
1897
+ self.P(f"Creating telegram bot {telegram_bot_name} with token {obfuscated_token}...", color='b')
1898
+ instance = pipeline.create_plugin_instance(
1899
+ signature=signature,
1900
+ instance_id=self.log.get_unique_id(),
1901
+ telegram_bot_token=telegram_bot_token,
1902
+ telegram_bot_name=telegram_bot_name,
1903
+ system_prompt=system_prompt,
1904
+ agent_type=agent_type,
1905
+ api_token=api_token,
1906
+ rag_source_url=rag_source_url,
1907
+ **kwargs
1908
+ )
1909
+ return pipeline, instance
1910
+
1757
1911
 
1758
1912
  def broadcast_instance_command_and_wait_for_response_payload(
1759
1913
  self,
@@ -550,8 +550,14 @@ class BaseCodeChecker:
550
550
 
551
551
  name = method.__name__
552
552
  args = list(map(str, inspect.signature(method).parameters.values()))
553
- if args[0] in ['self', 'cls', 'plugin']:
553
+ ##
554
+ first_arg = args[0]
555
+ first_arg = first_arg.split(':')[0]
556
+ first_arg = first_arg.split('=')[0]
557
+ first_arg = first_arg.strip()
558
+ if first_arg in ['self', 'cls', 'plugin']:
554
559
  args = args[1:]
560
+ ##
555
561
  source = self.get_function_source_code(method)
556
562
  base64_code = self.code_to_base64(source)
557
563
 
@@ -560,7 +566,7 @@ class BaseCodeChecker:
560
566
 
561
567
  if __name__ == '__main__':
562
568
 
563
- def some_function(plugin, x):
569
+ def some_function(plugin : int, x):
564
570
  """
565
571
  A simple function that adds 1 to the input.
566
572
 
@@ -7,5 +7,6 @@ class PLUGIN_SIGNATURES:
7
7
  VIEW_SCENE_01 = 'VIEW_SCENE_01'
8
8
  CUSTOM_WEB_APP_01 = 'CUSTOM_CODE_FASTAPI_01'
9
9
  CHAIN_DIST_CUSTOM_JOB_01 = 'PROCESS_REAL_TIME_COLLECTED_DATA_CUSTOM_EXEC_CHAIN_DIST'
10
- BASIC_TELEGRAM_BOT_01 = 'BASIC_TELEGRAM_BOT_01'
10
+ TELEGRAM_BASIC_BOT_01 = 'TELEGRAM_BASIC_BOT_01'
11
+ TELEGRAM_CONVERSATIONAL_BOT_01 = 'TELEGRAM_CONVERSATIONAL_BOT_01'
11
12
  # INSERT_NEW_PLUGIN_HERE
@@ -30,3 +30,6 @@ class ENVIRONMENT:
30
30
  AIXP_SECURED = 'AIXP_SECURED'
31
31
 
32
32
  TELEGRAM_BOT_TOKEN_ENV_KEY = 'TELEGRAM_BOT_TOKEN'
33
+ TELEGRAM_BOT_NAME_ENV_KEY = 'TELEGRAM_BOT_NAME'
34
+
35
+ TELEGRAM_API_AGENT_TOKEN_ENV_KEY = 'TELEGRAM_API_AGENT_TOKEN'
@@ -2,7 +2,7 @@ from .net_mon_01_plugin import NetMon01
2
2
  from .view_scene_01_plugin import ViewScene01
3
3
  from .custom_web_app_01_plugin import CustomWebApp01
4
4
  from .chain_dist_custom_job_01_plugin import ChainDistCustomJob01
5
- from .basic_telegram_bot_01_plugin import BasicTelegramBot01
5
+ from .telegram_basic_bot_01_plugin import BasicTelegramBot01
6
6
 
7
7
 
8
8
  class PLUGIN_TYPES:
@@ -13,4 +13,4 @@ class PLUGIN_TYPES:
13
13
  VIEW_SCENE_01 = ViewScene01
14
14
  CUSTOM_WEB_APP_01 = CustomWebApp01
15
15
  CHAIN_DIST_CUSTOM_JOB_01 = ChainDistCustomJob01
16
- BASIC_TELEGRAM_BOT_01 = BasicTelegramBot01
16
+ TELEGRAM_BASIC_BOT_01 = BasicTelegramBot01
@@ -2,6 +2,6 @@ from ...base import Instance
2
2
  from ...const import PLUGIN_SIGNATURES
3
3
 
4
4
  class BasicTelegramBot01(Instance):
5
- signature = PLUGIN_SIGNATURES.BASIC_TELEGRAM_BOT_01
5
+ signature = PLUGIN_SIGNATURES.TELEGRAM_BASIC_BOT_01
6
6
 
7
7
 
@@ -0,0 +1,7 @@
1
+ from ...base import Instance
2
+ from ...const import PLUGIN_SIGNATURES
3
+
4
+ class TelegramConversationalBot01(Instance):
5
+ signature = PLUGIN_SIGNATURES.TELEGRAM_CONVERSATIONAL_BOT_01
6
+
7
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: naeural_client
3
- Version: 2.1.1
3
+ Version: 2.1.3
4
4
  Summary: `naeural_client` is the Python SDK required for client app development for the Naeural Edge Protocol Edge Protocol framework
5
5
  Project-URL: Homepage, https://github.com/Naeural Edge ProtocolEdgeProtocol/naeural_client
6
6
  Project-URL: Bug Tracker, https://github.com/Naeural Edge ProtocolEdgeProtocol/naeural_client/issues
@@ -1,10 +1,10 @@
1
1
  naeural_client/__init__.py,sha256=UKEDGS0wFYyxwmhEAKJGecO2vYbIfRYUP4SQgnK10IE,578
2
- naeural_client/_ver.py,sha256=uXJ6vSOerh941OWnXiM13FiA3hI-oi_0TjiaLu54uAQ,330
2
+ naeural_client/_ver.py,sha256=9yGYKp4Aq8YyEua3enIbC407KkkIHPnt8UZ27gpzk30,330
3
3
  naeural_client/base_decentra_object.py,sha256=qDBpitcyhr1eEXPD8cGFtcNPNf71fqNRsmOEcCpx4sM,4180
4
4
  naeural_client/plugins_manager_mixin.py,sha256=X1JdGLDz0gN1rPnTN_5mJXR8JmqoBFQISJXmPR9yvCo,11106
5
5
  naeural_client/base/__init__.py,sha256=hACh83_cIv7-PwYMM3bQm2IBmNqiHw-3PAfDfAEKz9A,259
6
6
  naeural_client/base/distributed_custom_code_presets.py,sha256=cvz5R88P6Z5V61Ce1vHVVh8bOkgXd6gve_vdESDNAsg,2544
7
- naeural_client/base/generic_session.py,sha256=kjeLYdsq9Z8vnbCL9JA8abbFqBb-hhYsL4imRIBGPbU,69818
7
+ naeural_client/base/generic_session.py,sha256=BtpuXJFZgFESHwvzJp1XYw687u2OiP72A-NBaLRFN7s,75929
8
8
  naeural_client/base/instance.py,sha256=kcZJmjLBtx8Bjj_ysIOx1JmLA-qSpG7E28j5rq6IYus,20444
9
9
  naeural_client/base/pipeline.py,sha256=KwcPWD2XMvHotWFMpcnIycFhqiNnZuyUTUWiLU0PM5Y,57519
10
10
  naeural_client/base/plugin_template.py,sha256=qGaXByd_JZFpjvH9GXNbT7KaitRxIJB6-1IhbKrZjq4,138123
@@ -19,27 +19,28 @@ naeural_client/bc/ec.py,sha256=8ryEvc3__lVXSoYxd1WoTy9c8uC5Q_8R1uME7CeloIg,8578
19
19
  naeural_client/certs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
20
  naeural_client/certs/r9092118.ala.eu-central-1.emqxsl.com.crt,sha256=y-6io0tseyx9-a4Pmde1z1gPULtJNSYUpG_YFkYaMKU,1337
21
21
  naeural_client/code_cheker/__init__.py,sha256=pwkdeZGVL16ZA4Qf2mRahEhoOvKhL7FyuQbMFLr1E5M,33
22
- naeural_client/code_cheker/base.py,sha256=toYgYFziH5x4Gqo0VedEMsANsBZAJd13mvKhRf28AQc,18907
22
+ naeural_client/code_cheker/base.py,sha256=lT5DRIFO5rqzsMNCmdMRfkAeevmezozehyfgmhnKpuI,19074
23
23
  naeural_client/code_cheker/checker.py,sha256=QWupeM7ToancVIq1tRUxRNUrI8B5l5eoY0kDU4-O5aE,7365
24
24
  naeural_client/comm/__init__.py,sha256=za3B2HUKNXzYtjElMgGM9xbxNsdQfFY4JB_YzdyFkVU,76
25
25
  naeural_client/comm/amqp_wrapper.py,sha256=hzj6ih07DnLQy2VSfA88giDIFHaCp9uSdGLTA-IFE4s,8535
26
26
  naeural_client/comm/mqtt_wrapper.py,sha256=Ig3bFZkCbWd4y_Whn2PPa91Z3aLgNbNPau6Tn5yLPZ8,16167
27
27
  naeural_client/const/README.md,sha256=6OHesr-f5NBuuJGryEoi_TCu2XdlhfQYlDKx_IJoXeg,177
28
28
  naeural_client/const/__init__.py,sha256=G7Fa50SpEhAPOnL8_mxgVmJ0Xq1qEncWd75pg2BkiG4,416
29
- naeural_client/const/apps.py,sha256=i0MNCM1Wf7QUCB4OKO1vGNUonPs6EsnZV6-XZjknppw,439
29
+ naeural_client/const/apps.py,sha256=TJpbD7-1tIKxMdpVgZMHOka1k7a6vtW45rQL87K-jvE,507
30
30
  naeural_client/const/base.py,sha256=V94oaT7xYrrTGxmLJlynxmbFujVX0G9wIfC8TilH5MU,2548
31
31
  naeural_client/const/comms.py,sha256=La6JXWHexH8CfcBCKyT4fCIoeaoZlcm7KtZ57ab4ZgU,2201
32
- naeural_client/const/environment.py,sha256=bq21Q7e5FXpTNpoek_CUOX5oOZpSJEtNHXiZ79ZHe18,753
32
+ naeural_client/const/environment.py,sha256=iytmTDgbOjvORPwHQmc0K0r-xJx7dnnzNnqAJJiFCDA,870
33
33
  naeural_client/const/formatter.py,sha256=AW3bWlqf39uaqV4BBUuW95qKYfF2OkkU4f9hy3kSVhM,200
34
34
  naeural_client/const/heartbeat.py,sha256=jGHmKfeHTFOXJaKUT3o_ocnQyF-EpcLeunW-ifkYKfU,2534
35
35
  naeural_client/const/misc.py,sha256=1ypROmZsOyp_8zG2LARwPeo-YfXuyYqZnml0elTP4kw,211
36
36
  naeural_client/const/payload.py,sha256=k24vH9iJIBBPnCXx7HAEuli2fNAETK7h8ZuVKyKLgbk,5725
37
37
  naeural_client/default/__init__.py,sha256=ozU6CMMuWl0LhG8Ae3LrZ65a6tLrptfscVYGf83zjxM,46
38
- naeural_client/default/instance/__init__.py,sha256=pHR9_5t3xv9ug3nu-8202yW-rqq-KR3C_L5N2xaADTA,548
39
- naeural_client/default/instance/basic_telegram_bot_01_plugin.py,sha256=4674YFg5DfGO8_bYA1Uo77duZgKYGFX1J0Xp8YzjyPM,161
38
+ naeural_client/default/instance/__init__.py,sha256=Itb4l6_DR6CCw8KAxyQKlCmALyzDasNHIfM9VB-Umak,548
40
39
  naeural_client/default/instance/chain_dist_custom_job_01_plugin.py,sha256=QtHi3uXKsVs9eyMgbnvBVbMylErhV1Du4X2-7zDL7Y0,1915
41
40
  naeural_client/default/instance/custom_web_app_01_plugin.py,sha256=ZDe-QXmr6KLyUx5wzA3xVrMPg8yHnWLUbGjZtB0PFgg,4785
42
41
  naeural_client/default/instance/net_mon_01_plugin.py,sha256=u85i2AiYHkLJnam0wOx-m71hlp0EYyNtk3JwbkOrvHg,1208
42
+ naeural_client/default/instance/telegram_basic_bot_01_plugin.py,sha256=P_W2K_ng7svbhoIoYGvkGxa4v9UUoxuOAAgtoM36wDo,161
43
+ naeural_client/default/instance/telegram_conversational_bot_01_plugin.py,sha256=XkyE-uNbtFnTSGA1nOf-XNmUipAUjhg0xXV1glRb7gc,179
43
44
  naeural_client/default/instance/view_scene_01_plugin.py,sha256=5kMhd23kL5AYCdOJzrdCqi2ohoQNvmpv8oE6hWQtUWk,720
44
45
  naeural_client/default/session/mqtt_session.py,sha256=dpQcBhhVZDo458v0IqJMZb1CsTn-TxXhYjNlyJp9Rp8,2414
45
46
  naeural_client/io_formatter/__init__.py,sha256=_wy7c-Z9kgb26jN7uNTDq88G7xZ3wI_ObuQd3QWNPkQ,85
@@ -74,7 +75,7 @@ naeural_client/logging/tzlocal/windows_tz.py,sha256=Sv9okktjZJfRGGUOOppsvQuX_eXy
74
75
  naeural_client/utils/__init__.py,sha256=mAnke3-MeRzz3nhQvhuHqLnpaaCSmDxicd7Ck9uwpmI,77
75
76
  naeural_client/utils/comm_utils.py,sha256=4cS9llRr_pK_3rNgDcRMCQwYPO0kcNU7AdWy_LtMyCY,1072
76
77
  naeural_client/utils/dotenv.py,sha256=_AgSo35n7EnQv5yDyu7C7i0kHragLJoCGydHjvOkrYY,2008
77
- naeural_client-2.1.1.dist-info/METADATA,sha256=lW6p8iUe_boomUpBmtX-aNHx0k_zRquY3qpS8DecAJw,14457
78
- naeural_client-2.1.1.dist-info/WHEEL,sha256=3U_NnUcV_1B1kPkYaPzN-irRckL5VW_lytn0ytO_kRY,87
79
- naeural_client-2.1.1.dist-info/licenses/LICENSE,sha256=cvOsJVslde4oIaTCadabXnPqZmzcBO2f2zwXZRmJEbE,11311
80
- naeural_client-2.1.1.dist-info/RECORD,,
78
+ naeural_client-2.1.3.dist-info/METADATA,sha256=HNXZUOAndQihA5zFOSH3ET9GNzb64O96Y7zr0VDIh78,14457
79
+ naeural_client-2.1.3.dist-info/WHEEL,sha256=3U_NnUcV_1B1kPkYaPzN-irRckL5VW_lytn0ytO_kRY,87
80
+ naeural_client-2.1.3.dist-info/licenses/LICENSE,sha256=cvOsJVslde4oIaTCadabXnPqZmzcBO2f2zwXZRmJEbE,11311
81
+ naeural_client-2.1.3.dist-info/RECORD,,