nexaai 1.0.22__cp310-cp310-win_amd64.whl → 1.0.23__cp310-cp310-win_amd64.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.

Potentially problematic release.


This version of nexaai might be problematic. Click here for more details.

Binary file
nexaai/_version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # This file is generated by CMake from _version.py.in
2
2
  # Do not modify this file manually - it will be overwritten
3
3
 
4
- __version__ = "1.0.22"
4
+ __version__ = "1.0.23"
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
nexaai/cv.py CHANGED
@@ -10,7 +10,7 @@ from nexaai.common import PluginID
10
10
  class BoundingBox:
11
11
  """Generic bounding box structure."""
12
12
  x: float # X coordinate (normalized or pixel, depends on model)
13
- y: float # Y coordinate (normalized or pixel, depends on model)
13
+ y: float # Y coordinate (normalized or pixel, depends on model)
14
14
  width: float # Width
15
15
  height: float # Height
16
16
 
@@ -24,7 +24,8 @@ class CVResult:
24
24
  confidence: float = 0.0 # Confidence score [0.0-1.0]
25
25
  bbox: Optional[BoundingBox] = None # Bounding box (example: YOLO)
26
26
  text: Optional[str] = None # Text result (example: OCR)
27
- embedding: Optional[List[float]] = None # Feature embedding (example: CLIP embedding)
27
+ # Feature embedding (example: CLIP embedding)
28
+ embedding: Optional[List[float]] = None
28
29
  embedding_dim: int = 0 # Embedding dimension
29
30
 
30
31
 
@@ -70,22 +71,23 @@ class CVModel(BaseModel):
70
71
 
71
72
  @classmethod
72
73
  def _load_from(cls,
73
- _: str, # TODO: remove this argument, this is a hack to make api design happy
74
- config: CVModelConfig,
74
+ local_path: str,
75
+ model_name: Optional[str] = None,
76
+ m_cfg: CVModelConfig = CVModelConfig(CVCapabilities.OCR),
75
77
  plugin_id: Union[PluginID, str] = PluginID.LLAMA_CPP,
76
78
  device_id: Optional[str] = None,
77
79
  **kwargs
78
- ) -> 'CVModel':
80
+ ) -> 'CVModel':
79
81
  """Load CV model from configuration, routing to appropriate implementation."""
80
- # Check plugin_id value for routing - handle both enum and string
81
- plugin_value = plugin_id.value if isinstance(plugin_id, PluginID) else plugin_id
82
-
82
+ plugin_value = plugin_id.value if isinstance(
83
+ plugin_id, PluginID) else plugin_id
84
+
83
85
  if plugin_value == "mlx":
84
86
  from nexaai.cv_impl.mlx_cv_impl import MLXCVImpl
85
- return MLXCVImpl._load_from(config, plugin_id, device_id)
87
+ return MLXCVImpl._load_from(local_path, model_name, m_cfg, plugin_id, device_id, **kwargs)
86
88
  else:
87
89
  from nexaai.cv_impl.pybind_cv_impl import PyBindCVImpl
88
- return PyBindCVImpl._load_from(config, plugin_id, device_id)
90
+ return PyBindCVImpl._load_from(local_path, model_name, m_cfg, plugin_id, device_id, **kwargs)
89
91
 
90
92
  @abstractmethod
91
93
  def infer(self, input_image_path: str) -> CVResults:
@@ -1,32 +1,124 @@
1
- from typing import Optional, Union
1
+ from typing import Optional, Union, List
2
+ import os
2
3
 
3
- from nexaai.common import PluginID
4
- from nexaai.cv import CVModel, CVModelConfig, CVResults
4
+ from nexaai.common import PluginID, ModelConfig
5
+ from nexaai.cv import CVModel, CVModelConfig, CVResults, CVResult, BoundingBox, CVCapabilities
6
+ from nexaai.binds import cv_bind, common_bind
7
+ from nexaai.runtime import _ensure_runtime
5
8
 
6
9
 
7
10
  class PyBindCVImpl(CVModel):
8
- def __init__(self):
9
- """Initialize PyBind CV implementation."""
11
+ def __init__(self, handle: any, m_cfg: ModelConfig = ModelConfig()):
12
+ """Private constructor, should not be called directly."""
10
13
  super().__init__()
11
- # TODO: Add PyBind-specific initialization
14
+ self._handle = handle # This is a py::capsule
15
+ self._model_config = None
12
16
 
13
17
  @classmethod
14
18
  def _load_from(cls,
15
- config: CVModelConfig,
19
+ local_path: str, # This is the local path after auto_download_model processing
20
+ model_name: Optional[str] = None,
21
+ m_cfg: CVModelConfig = CVModelConfig(CVCapabilities.OCR),
16
22
  plugin_id: Union[PluginID, str] = PluginID.LLAMA_CPP,
17
- device_id: Optional[str] = None
18
- ) -> 'PyBindCVImpl':
23
+ device_id: Optional[str] = None,
24
+ **kwargs
25
+ ) -> 'PyBindCVImpl':
19
26
  """Load CV model from configuration using PyBind backend."""
20
- # TODO: Implement PyBind CV loading
21
- instance = cls()
22
- return instance
27
+ _ensure_runtime()
28
+
29
+ config = cv_bind.CVModelConfig()
30
+ config.capabilities = cv_bind.CVCapabilities(m_cfg.capabilities)
31
+ if m_cfg.det_model_path is not None:
32
+ config.det_model_path = m_cfg.det_model_path
33
+ else:
34
+ config.det_model_path = local_path
35
+
36
+ print("local_path: ", local_path)
37
+ print("m_cfg.rec_model_path: ", m_cfg.rec_model_path)
38
+ if m_cfg.rec_model_path is not None:
39
+ config.rec_model_path = m_cfg.rec_model_path
40
+ else:
41
+ config.rec_model_path = local_path
42
+ print("config.rec_model_path: ", config.rec_model_path)
43
+
44
+ if m_cfg.char_dict_path is not None:
45
+ config.char_dict_path = m_cfg.char_dict_path
46
+
47
+ if m_cfg.model_path is not None:
48
+ config.model_path = m_cfg.model_path
49
+
50
+ if m_cfg.system_library_path is not None:
51
+ config.system_library_path = m_cfg.system_library_path
52
+
53
+ plugin_id_str = plugin_id.value if isinstance(
54
+ plugin_id, PluginID) else str(plugin_id)
55
+
56
+ model_name_to_use = model_name if model_name else local_path
57
+ handle = cv_bind.ml_cv_create(
58
+ model_name=model_name_to_use,
59
+ config=config,
60
+ plugin_id=plugin_id_str,
61
+ device_id=device_id,
62
+ license_id=None,
63
+ license_key=None
64
+ )
65
+
66
+ return cls(handle, m_cfg)
23
67
 
24
68
  def eject(self):
25
- """Destroy the model and free resources."""
26
- # TODO: Implement PyBind CV cleanup
27
- pass
69
+ """Release the model from memory."""
70
+ # py::capsule handles cleanup automatically
71
+ if hasattr(self, '_handle') and self._handle is not None:
72
+ del self._handle
73
+ self._handle = None
28
74
 
29
75
  def infer(self, input_image_path: str) -> CVResults:
30
76
  """Perform inference on image."""
31
- # TODO: Implement PyBind CV inference
32
- raise NotImplementedError("PyBind CV inference not yet implemented")
77
+ if self._handle is None:
78
+ raise RuntimeError("CV model not loaded. Call _load_from first.")
79
+
80
+ if not os.path.exists(input_image_path):
81
+ raise FileNotFoundError(
82
+ f"Input image not found: {input_image_path}")
83
+
84
+ try:
85
+ # Perform inference using the binding
86
+ result_dict = cv_bind.ml_cv_infer(
87
+ handle=self._handle,
88
+ input_image_path=input_image_path
89
+ )
90
+
91
+ # Convert result dictionary to CVResults
92
+ results = []
93
+ for result_data in result_dict["results"]:
94
+ # Create bounding box if present
95
+ bbox = None
96
+ if "bbox" in result_data and result_data["bbox"] is not None:
97
+ bbox_data = result_data["bbox"]
98
+ bbox = BoundingBox(
99
+ x=bbox_data["x"],
100
+ y=bbox_data["y"],
101
+ width=bbox_data["width"],
102
+ height=bbox_data["height"]
103
+ )
104
+
105
+ # Create CV result
106
+ cv_result = CVResult(
107
+ image_paths=result_data.get("image_paths"),
108
+ image_count=result_data.get("image_count", 0),
109
+ class_id=result_data.get("class_id", 0),
110
+ confidence=result_data.get("confidence", 0.0),
111
+ bbox=bbox,
112
+ text=result_data.get("text"),
113
+ embedding=result_data.get("embedding"),
114
+ embedding_dim=result_data.get("embedding_dim", 0)
115
+ )
116
+ results.append(cv_result)
117
+
118
+ return CVResults(
119
+ results=results,
120
+ result_count=result_dict["result_count"]
121
+ )
122
+
123
+ except Exception as e:
124
+ raise RuntimeError(f"CV inference failed: {str(e)}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nexaai
3
- Version: 1.0.22
3
+ Version: 1.0.23
4
4
  Summary: Python bindings for NexaSDK C-lib backend
5
5
  Author-email: "Nexa AI, Inc." <dev@nexa.ai>
6
6
  Project-URL: Homepage, https://github.com/NexaAI/nexasdk-bridge
@@ -1,10 +1,10 @@
1
1
  nexaai/__init__.py,sha256=Yt2YPVcRfwdA6DQoUR4ZI34CHBUYoY2cVsrG7Zp6IrI,2516
2
- nexaai/_stub.cp310-win_amd64.pyd,sha256=KEyu4whFbX7ahYkHxUZE9Bvb68yBBNWGR0CNQ-4fCvs,10752
3
- nexaai/_version.py,sha256=ivY4bEQ0jgel7C15vIMosfWJgA8mHuZ-du5RS_0fPko,143
2
+ nexaai/_stub.cp310-win_amd64.pyd,sha256=krxve5v7zNDe00GvywzSZC7LjdPJqPd6jm75Zd7sobE,10752
3
+ nexaai/_version.py,sha256=jvuw8FsRzBuy2gWtiNcMHIovBrvEB6BUEhxloSiR5bE,143
4
4
  nexaai/asr.py,sha256=p_bTRqESa-4g6V3HGFzi8vqn8H4Q6yTLiLjL0yqVr3I,2362
5
5
  nexaai/base.py,sha256=qQBCiQVNzgpkQjZX9aiFDEdbAAe56TROKC3WnWra2Zg,1021
6
6
  nexaai/common.py,sha256=XRwjvRNxS2xRVb0CMR5NbPQ4E-PAewJ0m6VGbZOw19A,3565
7
- nexaai/cv.py,sha256=PhgqK5hO8FlXLR6QxE_pHtXjdtzLSEPzkCda-qrNpOs,3395
7
+ nexaai/cv.py,sha256=TI6VlaztYWpvgkF7tLvQWYgCaNgGAfXJXsbCLavM6wE,3433
8
8
  nexaai/embedder.py,sha256=fzIdlE52SSVNurIFZgf9gKtRf2SXysARsETQmkiCWs0,2625
9
9
  nexaai/image_gen.py,sha256=_kLLCbvhc30a-YGidkB13ZXYoPOS-sKMo8bKVRkUado,4526
10
10
  nexaai/llm.py,sha256=woB98NQmaNf3_BH0Ogig3niU1rcD8YtHPiSpzyrbVmo,3771
@@ -18,37 +18,38 @@ nexaai/asr_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  nexaai/asr_impl/mlx_asr_impl.py,sha256=XwMX3LYMeulp8cDS0TCCYcjvttFHAyDWQ_oMvABwQmI,3349
19
19
  nexaai/asr_impl/pybind_asr_impl.py,sha256=I-J_pp4Tdafa-ipp34q2dN4dbL905nlpBYVBGLQwLVI,4807
20
20
  nexaai/binds/__init__.py,sha256=cDlzRJF5pq0YmiwmUvdNO9CrvYrBdkYWR4xXrEbwLyU,161
21
- nexaai/binds/asr_bind.cp310-win_amd64.pyd,sha256=m50-FsvEkrfVFtf6Rk1AVPppkCrELc71Smc2W6ebs2M,192000
22
- nexaai/binds/common_bind.cp310-win_amd64.pyd,sha256=hy-gEksGbyuSa44XGe5gmfwvmfm0iZJuTNOd_v0Xo4A,205824
23
- nexaai/binds/embedder_bind.cp310-win_amd64.pyd,sha256=wo0-I8V9uUBCW_9Mof_42vd-QK4sTUPfES3bg5AIlFg,183808
21
+ nexaai/binds/asr_bind.cp310-win_amd64.pyd,sha256=vl2y1zBTCoX1gD9yIMYs0B3iuNSLR1RhA4o56umN8TA,192000
22
+ nexaai/binds/common_bind.cp310-win_amd64.pyd,sha256=5tmncxGObCeb7WX37akWRyubL2fCtbNG3u8S0aLZyWs,205824
23
+ nexaai/binds/cv_bind.cp310-win_amd64.pyd,sha256=BVdIMSx64jl-f4u8a2ueiF23upTVsTPpQPpzuZtLoZY,230912
24
+ nexaai/binds/embedder_bind.cp310-win_amd64.pyd,sha256=Y1jBOz9nezR1MHjYIGGZOMyvSznJkyAhgQJJ7Rx3bNw,183808
24
25
  nexaai/binds/libcrypto-3-x64.dll,sha256=X7hDuQPMn6eRe58dTGJxTmRPKFWgd5i6Gjoy9QPLmPg,7315968
25
26
  nexaai/binds/libssl-3-x64.dll,sha256=GRw0cOaGUaR2QHRvBFuU_9S9iNgkyVgm0NIpZMnReAw,1313792
26
- nexaai/binds/llm_bind.cp310-win_amd64.pyd,sha256=KdcZF5shnqqfqogeiEJ-11OUe1os7rr22bW25Xbv_I4,166400
27
- nexaai/binds/nexa_bridge.dll,sha256=VYTa4zclMKJC2AfL155QLxJzH4wcO_8O5O7Rd8Dj5LQ,190976
28
- nexaai/binds/rerank_bind.cp310-win_amd64.pyd,sha256=BYf5QaRA8-Wjar7FuE890NF6LGkage6FZRaUPLCt3B8,178176
29
- nexaai/binds/vlm_bind.cp310-win_amd64.pyd,sha256=XyBTpjgYMfoD10YuRnfB3Fgivzs7RSWSD9yR6eN2k6o,171520
30
- nexaai/binds/cpu_gpu/ggml-base.dll,sha256=vcESAaud2k5HfVS4xjdUHlb8hPDzw7qVM7huYykDGws,532480
31
- nexaai/binds/cpu_gpu/ggml-cpu.dll,sha256=zbXppL8mtjbVGxFVV7hIDXb4Vi7oqQi-kndzb8mp3kI,672768
32
- nexaai/binds/cpu_gpu/ggml-cuda.dll,sha256=R66N-OKwvooY0jhTfhxEBKF5-vfraG5RC6ABVXJQ-e4,313528832
33
- nexaai/binds/cpu_gpu/ggml-vulkan.dll,sha256=hOEeLexuKD1uenpijMqTOe4AmYSMGe_jg6JqagOlAAE,36627968
34
- nexaai/binds/cpu_gpu/ggml.dll,sha256=Qlypa-cCdBcnXkgg2ErVRo7OI4Vsfsg-r1E8oeke4sk,66560
35
- nexaai/binds/cpu_gpu/mtmd.dll,sha256=yP6ze4ks_j8Na55RKWYjigybP5sMchNLIA_cgQvR_Zw,561152
36
- nexaai/binds/cpu_gpu/nexa_cpu_gpu.dll,sha256=0a2Yf-NqIuU3wDeQHiirTqIaXwmqnWIJ3RCfQh7bsUM,1611776
37
- nexaai/binds/cpu_gpu/nexa_plugin.dll,sha256=tDt7ys1fXVhno3VA2Z62HL79oyv087vmH3QUE0eJMUk,1424384
38
- nexaai/binds/nexaml/ggml-base.dll,sha256=vcESAaud2k5HfVS4xjdUHlb8hPDzw7qVM7huYykDGws,532480
39
- nexaai/binds/nexaml/ggml-cpu.dll,sha256=zbXppL8mtjbVGxFVV7hIDXb4Vi7oqQi-kndzb8mp3kI,672768
40
- nexaai/binds/nexaml/ggml-cuda.dll,sha256=R66N-OKwvooY0jhTfhxEBKF5-vfraG5RC6ABVXJQ-e4,313528832
41
- nexaai/binds/nexaml/ggml-vulkan.dll,sha256=hOEeLexuKD1uenpijMqTOe4AmYSMGe_jg6JqagOlAAE,36627968
42
- nexaai/binds/nexaml/ggml.dll,sha256=Qlypa-cCdBcnXkgg2ErVRo7OI4Vsfsg-r1E8oeke4sk,66560
27
+ nexaai/binds/llm_bind.cp310-win_amd64.pyd,sha256=GVzooNvq_hGX8sgZ0OzlrIji92kQsNEy0DrRETP-Xi0,166400
28
+ nexaai/binds/nexa_bridge.dll,sha256=ddpimInP4T8NZt377hMCjhLgV7EBPVlSEpdldXSVqpo,190976
29
+ nexaai/binds/rerank_bind.cp310-win_amd64.pyd,sha256=hQY6MEabDIg029J_Ut2H5jCL8ktACb8X8m8tQlmL9Jk,178176
30
+ nexaai/binds/vlm_bind.cp310-win_amd64.pyd,sha256=VdUSKpjBe-PA2Yp30-tbxkKr1DLF_wFE2CvZYyMnWHY,171520
31
+ nexaai/binds/cpu_gpu/ggml-base.dll,sha256=KrfapxFjVod-m3zkbvplZgu79nGICpB8u_TYv_JpuUE,532480
32
+ nexaai/binds/cpu_gpu/ggml-cpu.dll,sha256=ZnIGD3CZNDAEuXhm_OEpZWMmMdeM0PqdGFdnIPuAMeI,672768
33
+ nexaai/binds/cpu_gpu/ggml-cuda.dll,sha256=erOwNYLmLg42-0m7ZjwI_-6gUbx7_6tsMq8nUljgU78,313528832
34
+ nexaai/binds/cpu_gpu/ggml-vulkan.dll,sha256=lUYTXN9hXt8NVz9QieCAcDKPt2NvokWlFYQrO-xbHzo,36627968
35
+ nexaai/binds/cpu_gpu/ggml.dll,sha256=wROpeY7dNTg3grpUscFhPoByniT5NXk8hNMZl6DfSFc,66560
36
+ nexaai/binds/cpu_gpu/mtmd.dll,sha256=3DTtZOm_ItGjHm8RHsSqI4t6_rXQqeBkzSs0vetZ3GQ,561152
37
+ nexaai/binds/cpu_gpu/nexa_cpu_gpu.dll,sha256=pm0GwgepM78cYM9Ae5Sn5Uygeh_li-7hLhCd2Rx-MZQ,1611776
38
+ nexaai/binds/cpu_gpu/nexa_plugin.dll,sha256=pdMax4xDZSNqGTqdDhugTbHwggj_OMD7aB-YanjCQH4,1424384
39
+ nexaai/binds/nexaml/ggml-base.dll,sha256=KrfapxFjVod-m3zkbvplZgu79nGICpB8u_TYv_JpuUE,532480
40
+ nexaai/binds/nexaml/ggml-cpu.dll,sha256=ZnIGD3CZNDAEuXhm_OEpZWMmMdeM0PqdGFdnIPuAMeI,672768
41
+ nexaai/binds/nexaml/ggml-cuda.dll,sha256=erOwNYLmLg42-0m7ZjwI_-6gUbx7_6tsMq8nUljgU78,313528832
42
+ nexaai/binds/nexaml/ggml-vulkan.dll,sha256=lUYTXN9hXt8NVz9QieCAcDKPt2NvokWlFYQrO-xbHzo,36627968
43
+ nexaai/binds/nexaml/ggml.dll,sha256=wROpeY7dNTg3grpUscFhPoByniT5NXk8hNMZl6DfSFc,66560
43
44
  nexaai/binds/nexaml/nexa-mm-process.dll,sha256=DDD5qPbelZAIrRWGggOd3Pg9U_fh_ZEYIplwqiyD5LY,4643328
44
45
  nexaai/binds/nexaml/nexa-sampling.dll,sha256=Notkz287laSUG2_ED3oFXWVLJM3t7x_USkvX6wKVOLA,4265984
45
- nexaai/binds/nexaml/nexa_plugin.dll,sha256=dNr9-h_2jCAmVm74x0gT7JjFEuEv1MiSpZXevjUS-zo,604160
46
+ nexaai/binds/nexaml/nexa_plugin.dll,sha256=7ZJYrF1uCgnNnIbXSU0fSiyUlau_MpgSPFKjR2wPjzs,604160
46
47
  nexaai/binds/nexaml/nexaproc.dll,sha256=rRcdSfhkxnRwktXW4lp7Np8sNY_uefNXYwAmPp34AHg,2670080
47
48
  nexaai/binds/nexaml/qwen3-vl.dll,sha256=k0wPZNR6VejeR32KuFgCVyj7t7YaEmZOKhj9lwMw0-s,5874176
48
49
  nexaai/binds/nexaml/qwen3vl-vision.dll,sha256=5AX4MtAOWTcXSAkS2qqvl2pFti4HR55dtkCaOO03Evc,1063424
49
50
  nexaai/cv_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
51
  nexaai/cv_impl/mlx_cv_impl.py,sha256=QLd_8w90gtxH8kmssaDYatCTRvQNIJuUGKZNnYrmx6E,3317
51
- nexaai/cv_impl/pybind_cv_impl.py,sha256=aSOCAxmHrwJbEkSN6VX3Cykqlj_9RIpVrZXILul04GA,1096
52
+ nexaai/cv_impl/pybind_cv_impl.py,sha256=8jGGHPWF0-z8ch2BPn7Vn2pIjzUJ41b208Op17ifiYs,4885
52
53
  nexaai/embedder_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
54
  nexaai/embedder_impl/mlx_embedder_impl.py,sha256=WWTQrUWEMq1kLGg4CBQyu59zD2hIptghVEQXQAcx7hM,4757
54
55
  nexaai/embedder_impl/pybind_embedder_impl.py,sha256=Xsf4nczEzpRDqdx96DEu5GwLxGcSV06ZVnEV3a5-q68,3749
@@ -73,7 +74,7 @@ nexaai/utils/quantization_utils.py,sha256=FxnZ6-uAE_bl_vQ5jsRXlpU0NBn-U4Y8iN9_O6
73
74
  nexaai/vlm_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
75
  nexaai/vlm_impl/mlx_vlm_impl.py,sha256=gI09QJcok68QG-36csXr3c2yPCZXTE0dlq1MUBEo_Ms,11091
75
76
  nexaai/vlm_impl/pybind_vlm_impl.py,sha256=w8gAZNW2lk3mCKolg4iKgD58RhHCEk4v9aYI1RwVGqc,10021
76
- nexaai-1.0.22.dist-info/METADATA,sha256=1THXwOXkS8oTllWqv2QjVjcJ8J9VzB_MSCmB0W8uWjo,1215
77
- nexaai-1.0.22.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
78
- nexaai-1.0.22.dist-info/top_level.txt,sha256=LRE2YERlrZk2vfuygnSzsEeqSknnZbz3Z1MHyNmBU4w,7
79
- nexaai-1.0.22.dist-info/RECORD,,
77
+ nexaai-1.0.23.dist-info/METADATA,sha256=ghgqII8_rVkGTKEww-GkKbxEtYSuGl5oWOlqoQXKqBQ,1215
78
+ nexaai-1.0.23.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
79
+ nexaai-1.0.23.dist-info/top_level.txt,sha256=LRE2YERlrZk2vfuygnSzsEeqSknnZbz3Z1MHyNmBU4w,7
80
+ nexaai-1.0.23.dist-info/RECORD,,