nexaai 1.0.4rc16__cp310-cp310-win_amd64.whl → 1.0.6rc1__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.4-rc16"
4
+ __version__ = "1.0.6-rc1"
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
nexaai/common.py CHANGED
@@ -59,10 +59,45 @@ class ModelConfig:
59
59
 
60
60
  @dataclass(frozen=True) # Read-only
61
61
  class ProfilingData:
62
- start_time: int
63
- end_time: int
64
- prompt_start_time: int = None
65
- prompt_end_time: int = None
66
- decode_start_time: int = None
67
- decode_ent_time: int = None
68
- first_token_time: int = None
62
+ """Profiling data structure for LLM/VLM performance metrics."""
63
+ ttft: int = 0 # Time to first token (us)
64
+ prompt_time: int = 0 # Prompt processing time (us)
65
+ decode_time: int = 0 # Token generation time (us)
66
+ prompt_tokens: int = 0 # Number of prompt tokens
67
+ generated_tokens: int = 0 # Number of generated tokens
68
+ audio_duration: int = 0 # Audio duration (us)
69
+ prefill_speed: float = 0.0 # Prefill speed (tokens/sec)
70
+ decoding_speed: float = 0.0 # Decoding speed (tokens/sec)
71
+ real_time_factor: float = 0.0 # Real-Time Factor (RTF)
72
+ stop_reason: str = "" # Stop reason: "eos", "length", "user", "stop_sequence"
73
+
74
+ @classmethod
75
+ def from_dict(cls, data: dict) -> "ProfilingData":
76
+ """Create ProfilingData from dictionary."""
77
+ return cls(
78
+ ttft=data.get("ttft", 0),
79
+ prompt_time=data.get("prompt_time", 0),
80
+ decode_time=data.get("decode_time", 0),
81
+ prompt_tokens=data.get("prompt_tokens", 0),
82
+ generated_tokens=data.get("generated_tokens", 0),
83
+ audio_duration=data.get("audio_duration", 0),
84
+ prefill_speed=data.get("prefill_speed", 0.0),
85
+ decoding_speed=data.get("decoding_speed", 0.0),
86
+ real_time_factor=data.get("real_time_factor", 0.0),
87
+ stop_reason=data.get("stop_reason", "")
88
+ )
89
+
90
+ def to_dict(self) -> dict:
91
+ """Convert to dictionary."""
92
+ return {
93
+ "ttft": self.ttft,
94
+ "prompt_time": self.prompt_time,
95
+ "decode_time": self.decode_time,
96
+ "prompt_tokens": self.prompt_tokens,
97
+ "generated_tokens": self.generated_tokens,
98
+ "audio_duration": self.audio_duration,
99
+ "prefill_speed": self.prefill_speed,
100
+ "decoding_speed": self.decoding_speed,
101
+ "real_time_factor": self.real_time_factor,
102
+ "stop_reason": self.stop_reason
103
+ }
nexaai/llm.py CHANGED
@@ -4,7 +4,7 @@ import queue
4
4
  import threading
5
5
 
6
6
  from nexaai.common import ModelConfig, GenerationConfig, ChatMessage, PluginID
7
- from nexaai.base import BaseModel
7
+ from nexaai.base import BaseModel, ProfilingData
8
8
 
9
9
  class LLM(BaseModel):
10
10
  def __init__(self, m_cfg: ModelConfig = ModelConfig()):
@@ -63,6 +63,10 @@ class LLM(BaseModel):
63
63
  """
64
64
  pass
65
65
 
66
+ def get_profiling_data(self) -> Optional[ProfilingData]:
67
+ """Get profiling data from the last generation."""
68
+ pass
69
+
66
70
  @abstractmethod
67
71
  def save_kv_cache(self, path: str):
68
72
  """
@@ -1,5 +1,6 @@
1
1
  from typing import Generator, Optional, Any, Sequence, Union
2
2
 
3
+ from nexaai.base import ProfilingData
3
4
  from nexaai.common import ModelConfig, GenerationConfig, ChatMessage, PluginID
4
5
  from nexaai.llm import LLM
5
6
  from nexaai.mlx_backend.llm.interface import LLM as MLXLLMInterface
@@ -215,6 +216,12 @@ class MLXLLMImpl(LLM):
215
216
  except Exception as e:
216
217
  raise RuntimeError(f"Failed to generate text: {str(e)}")
217
218
 
219
+ def get_profiling_data(self) -> Optional[ProfilingData]:
220
+ """Get profiling data from the last generation."""
221
+ if not self._mlx_llm:
222
+ raise RuntimeError("MLX LLM not loaded")
223
+ return self._mlx_llm.get_profiling_data()
224
+
218
225
  def save_kv_cache(self, path: str):
219
226
  """
220
227
  Save the key-value cache to the file.
@@ -2,6 +2,7 @@ from typing import Generator, Optional, Union
2
2
  import queue
3
3
  import threading
4
4
 
5
+ from nexaai.base import ProfilingData
5
6
  from nexaai.common import ModelConfig, GenerationConfig, ChatMessage, PluginID
6
7
  from nexaai.binds import llm_bind, common_bind
7
8
  from nexaai.runtime import _ensure_runtime
@@ -13,6 +14,7 @@ class PyBindLLMImpl(LLM):
13
14
  """Private constructor, should not be called directly."""
14
15
  super().__init__(m_cfg)
15
16
  self._handle = handle # This is a py::capsule
17
+ self._profiling_data = None
16
18
 
17
19
  @classmethod
18
20
  def _load_from(cls,
@@ -97,13 +99,14 @@ class PyBindLLMImpl(LLM):
97
99
  # Run generation in thread
98
100
  def generate():
99
101
  try:
100
- llm_bind.ml_llm_generate(
102
+ result = llm_bind.ml_llm_generate(
101
103
  handle=self._handle,
102
104
  prompt=prompt,
103
105
  config=config,
104
106
  on_token=on_token,
105
107
  user_data=None
106
108
  )
109
+ self._profiling_data = ProfilingData.from_dict(result.get("profile_data", {}))
107
110
  except Exception as e:
108
111
  exception_container[0] = e
109
112
  finally:
@@ -145,8 +148,14 @@ class PyBindLLMImpl(LLM):
145
148
  on_token=None, # No callback for non-streaming
146
149
  user_data=None
147
150
  )
151
+
152
+ self._profiling_data = ProfilingData.from_dict(result.get("profile_data", {}))
148
153
  return result.get("text", "")
149
154
 
155
+ def get_profiling_data(self) -> Optional[ProfilingData]:
156
+ """Get profiling data."""
157
+ return self._profiling_data
158
+
150
159
  def save_kv_cache(self, path: str):
151
160
  """
152
161
  Save the key-value cache to the file.
nexaai/vlm.py CHANGED
@@ -6,7 +6,7 @@ import base64
6
6
  from pathlib import Path
7
7
 
8
8
  from nexaai.common import ModelConfig, GenerationConfig, MultiModalMessage, PluginID
9
- from nexaai.base import BaseModel
9
+ from nexaai.base import BaseModel, ProfilingData
10
10
 
11
11
 
12
12
  class VLM(BaseModel):
@@ -120,4 +120,8 @@ class VLM(BaseModel):
120
120
  Returns:
121
121
  str: The generated text.
122
122
  """
123
+ pass
124
+
125
+ def get_profiling_data(self) -> Optional[ProfilingData]:
126
+ """Get profiling data from the last generation."""
123
127
  pass
@@ -1,5 +1,6 @@
1
1
  from typing import Generator, Optional, List, Dict, Any, Union
2
2
 
3
+ from nexaai.base import ProfilingData
3
4
  from nexaai.common import ModelConfig, GenerationConfig, MultiModalMessage, PluginID
4
5
  from nexaai.vlm import VLM
5
6
  from nexaai.mlx_backend.vlm.interface import VLM as MLXVLMInterface
@@ -247,3 +248,9 @@ class MlxVlmImpl(VLM):
247
248
 
248
249
  except Exception as e:
249
250
  raise RuntimeError(f"Failed to generate text: {str(e)}")
251
+
252
+ def get_profiling_data(self) -> Optional[ProfilingData]:
253
+ """Get profiling data from the last generation."""
254
+ if not self._mlx_vlm:
255
+ raise RuntimeError("MLX VLM not loaded")
256
+ return self._mlx_vlm.get_profiling_data()
@@ -8,6 +8,7 @@ from nexaai.common import ModelConfig, GenerationConfig, MultiModalMessage, Plug
8
8
  from nexaai.binds import vlm_bind, common_bind
9
9
  from nexaai.runtime import _ensure_runtime
10
10
  from nexaai.vlm import VLM
11
+ from nexaai.base import ProfilingData
11
12
 
12
13
 
13
14
  class PyBindVLMImpl(VLM):
@@ -15,6 +16,7 @@ class PyBindVLMImpl(VLM):
15
16
  """Private constructor, should not be called directly."""
16
17
  super().__init__(m_cfg)
17
18
  self._handle = handle # This is a py::capsule
19
+ self._profiling_data = None
18
20
 
19
21
  @classmethod
20
22
  def _load_from(cls,
@@ -143,13 +145,14 @@ class PyBindVLMImpl(VLM):
143
145
  # Run generation in thread
144
146
  def generate():
145
147
  try:
146
- vlm_bind.ml_vlm_generate(
148
+ result = vlm_bind.ml_vlm_generate(
147
149
  handle=self._handle,
148
150
  prompt=prompt,
149
151
  config=config,
150
152
  on_token=on_token,
151
153
  user_data=None
152
154
  )
155
+ self._profiling_data = ProfilingData.from_dict(result.get("profile_data", {}))
153
156
  except Exception as e:
154
157
  exception_container[0] = e
155
158
  finally:
@@ -191,8 +194,14 @@ class PyBindVLMImpl(VLM):
191
194
  on_token=None, # No callback for non-streaming
192
195
  user_data=None
193
196
  )
197
+
198
+ self._profiling_data = ProfilingData.from_dict(result.get("profile_data", {}))
194
199
  return result.get("text", "")
195
200
 
201
+ def get_profiling_data(self) -> Optional[ProfilingData]:
202
+ """Get profiling data."""
203
+ return self._profiling_data
204
+
196
205
  def _convert_generation_config(self, g_cfg: GenerationConfig):
197
206
  """Convert GenerationConfig to binding format."""
198
207
  config = common_bind.GenerationConfig()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nexaai
3
- Version: 1.0.4rc16
3
+ Version: 1.0.6rc1
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
@@ -17,11 +17,15 @@ Requires-Dist: tqdm
17
17
  Requires-Dist: hf_xet
18
18
  Requires-Dist: numpy
19
19
  Requires-Dist: httpx
20
- Requires-Dist: mlx
21
- Requires-Dist: mlx-lm
22
- Requires-Dist: scipy
23
- Requires-Dist: soundfile
24
- Requires-Dist: Pillow
25
- Requires-Dist: opencv-python
26
- Requires-Dist: shapely
27
- Requires-Dist: pyclipper
20
+ Provides-Extra: mlx
21
+ Requires-Dist: mlx; extra == "mlx"
22
+ Requires-Dist: mlx-lm; extra == "mlx"
23
+ Requires-Dist: mlx-vlm; extra == "mlx"
24
+ Requires-Dist: tokenizers; extra == "mlx"
25
+ Requires-Dist: safetensors; extra == "mlx"
26
+ Requires-Dist: Pillow; extra == "mlx"
27
+ Requires-Dist: scipy; extra == "mlx"
28
+ Requires-Dist: soundfile; extra == "mlx"
29
+ Requires-Dist: opencv-python; extra == "mlx"
30
+ Requires-Dist: shapely; extra == "mlx"
31
+ Requires-Dist: pyclipper; extra == "mlx"
@@ -1,35 +1,35 @@
1
1
  nexaai/__init__.py,sha256=Lt8NU57eTMtWrDYzpFeYR9XtGAPXqizynP83TPU0UW0,2105
2
- nexaai/_stub.cp310-win_amd64.pyd,sha256=TFrp5SGUtUxU6tmAQGdW08-lZQSC1cT0ubsv-3nL9zM,10752
3
- nexaai/_version.py,sha256=gt1sBWA4vOkqP20VQTuFnSh43Ss73r_dHBVTNMJs5bs,147
2
+ nexaai/_stub.cp310-win_amd64.pyd,sha256=HST07_JzYhB8bAd2oVWehmVKlFDRWUz5Df58YhKAdQY,10752
3
+ nexaai/_version.py,sha256=dIn7jmZ9zkHQxe3amjreYeA8-Nny4TsTFC6Ib2kqTEQ,146
4
4
  nexaai/asr.py,sha256=_fsGaxpiU137bUtO5ujtFSYCI1RLsyeEm3Gf4GhHVRk,2118
5
5
  nexaai/base.py,sha256=qQBCiQVNzgpkQjZX9aiFDEdbAAe56TROKC3WnWra2Zg,1021
6
- nexaai/common.py,sha256=8eWPG-kBGaV3Lb2K85fpmePWK4Ex2KvFnNsoFwnfSZo,1727
6
+ nexaai/common.py,sha256=6keIpdX5XS5us4z79EMoa6RSkVze9SbbXax13IJ9yvs,3525
7
7
  nexaai/cv.py,sha256=a6-csgYNDzPziJ0EojE9-BeM_xCny4UvWWbpnJ7GL-A,3365
8
8
  nexaai/embedder.py,sha256=3a81s7JapvYxCRbWPFKp_9EWBKW7WYqF03gk87YuGKU,2524
9
9
  nexaai/image_gen.py,sha256=4iASOKxJosMznLarTvOxJQDNaas251O81bfUWJTUBfE,4496
10
- nexaai/llm.py,sha256=bm01Ki8-towFLj6sBoAoZ2m6pWURKoxQWq2Vx_VQE2I,3508
10
+ nexaai/llm.py,sha256=Qwm1q_NStLfD-JYZQIvxniWnAmwNl1V6LUON3Me7w_I,3663
11
11
  nexaai/rerank.py,sha256=_zGWmX6eDigY2kViMKCtNssp4JMEeVycZZfJH9eAZOY,1927
12
12
  nexaai/runtime.py,sha256=LxAUejH9uaci8IGz9_h0l-MMeYcwTlBjVKN_0u4Q4Qo,2021
13
13
  nexaai/tts.py,sha256=afs6sx0w0Tvs_aJlyZRPm62qQpTrs-fW_jDHrMkc4AA,2241
14
- nexaai/vlm.py,sha256=Yaor0xjQXOeonQw8sBGMxpzGH_9gTD8BUwvPtKX7UlA,4622
14
+ nexaai/vlm.py,sha256=STjXCw67ABrHrEll8A2NGiwmfo7MotfYgBh1k1aNxkk,4775
15
15
  nexaai/asr_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  nexaai/asr_impl/mlx_asr_impl.py,sha256=XwMX3LYMeulp8cDS0TCCYcjvttFHAyDWQ_oMvABwQmI,3349
17
17
  nexaai/asr_impl/pybind_asr_impl.py,sha256=20o5SOPzhF9x41ra8L_qIM7YxCkYeLb5csSrNde-dds,1560
18
18
  nexaai/binds/__init__.py,sha256=tYvy0pFhoY29GstDT5r-oRiPRarPLECvJAkcamJItOg,83
19
- nexaai/binds/common_bind.cp310-win_amd64.pyd,sha256=v3SBHao_kOT8t0wYpS3lSU2sVIsxhGHGRl3pUJ31uNk,201216
20
- nexaai/binds/embedder_bind.cp310-win_amd64.pyd,sha256=ib43HMgpcxcK1Xhv0JkrAqWnX63DTugex0PUYFeDRIg,182784
19
+ nexaai/binds/common_bind.cp310-win_amd64.pyd,sha256=7tDfRwUhyQd1NBROT2o_AprFhI55tLIL4j3ZcZN490M,201216
20
+ nexaai/binds/embedder_bind.cp310-win_amd64.pyd,sha256=RODHqhlNdLp-dHuI9jGak3GyxIyEtcDvVvQ4fp56ovg,182784
21
21
  nexaai/binds/libcrypto-3-x64.dll,sha256=-Lau6pL5DpDXzpg9MED63gCeL8oRrSLI_e2LeaxIHqk,7314432
22
22
  nexaai/binds/libssl-3-x64.dll,sha256=Tzzyu5jRpUugFxr_65hbFlAtFpjxIDpOYMU1E0ijkJw,1313792
23
- nexaai/binds/llm_bind.cp310-win_amd64.pyd,sha256=pSFXKkpuR0d70rsmsn6e5c2ZEDcs8fdlZLeM2used_U,160256
24
- nexaai/binds/nexa_bridge.dll,sha256=kx3-fR10aORocb8P_8i9mhJURvRfzgzPKto44OYj-R4,178688
25
- nexaai/binds/nexa_llama_cpp/ggml-base.dll,sha256=8_iLmK7Z03f4wv1GaujaxHpyc1Hskq4TmcrMXz2mMEY,514560
26
- nexaai/binds/nexa_llama_cpp/ggml-cpu.dll,sha256=wnHnU906jYBTs0Vm7mmP2ySzlQHvdRAP-uC-TAm3ay8,663552
27
- nexaai/binds/nexa_llama_cpp/ggml-cuda.dll,sha256=qtGxMiTtyV-gFm8r_W2I7-4WDKpNXXNx2kQjZcLEYlA,315100160
28
- nexaai/binds/nexa_llama_cpp/ggml-vulkan.dll,sha256=sM7EgHPprNFy0gzu6FBUY_M1vBMybqxXwjkmtCUVYYU,26204160
29
- nexaai/binds/nexa_llama_cpp/ggml.dll,sha256=TrxL7VobooAEB5SEnwxqlX0zL0oWP201-CteFmmp6Z4,66560
30
- nexaai/binds/nexa_llama_cpp/llama.dll,sha256=29-yLnMIuHgFmX29oOo5zgaOl3GXcoTJSMpaYrbavOQ,1587712
31
- nexaai/binds/nexa_llama_cpp/mtmd.dll,sha256=MCrTsXkpIwQajIsXEtWcO3Lycuoui1IymNSq1QeLzrA,560128
32
- nexaai/binds/nexa_llama_cpp/nexa_plugin.dll,sha256=tdMdLNJyo5ioxowfoQmLlnaAPfZo-fzYhZ7yvGq5uCk,1380352
23
+ nexaai/binds/llm_bind.cp310-win_amd64.pyd,sha256=XYnaOZKM7tR6-J3cvWVe2I2RD3n-dumj9Wm82t-ghwE,162816
24
+ nexaai/binds/nexa_bridge.dll,sha256=i6RngDhL1Jct9B3ynxQuQP4UuiDr_aFcNiD3CyG_KhM,178688
25
+ nexaai/binds/nexa_llama_cpp/ggml-base.dll,sha256=jpgjj2HeA_oz56pF0H16JjT3FEp8dQ6t-elHV9AVOw0,532480
26
+ nexaai/binds/nexa_llama_cpp/ggml-cpu.dll,sha256=DOaGib8JcUx6k1z1F7l2BhQfa73RREiLGtRyBUqt5sk,672768
27
+ nexaai/binds/nexa_llama_cpp/ggml-cuda.dll,sha256=tMcjjLJlqvqxYG0torddnNUV18X13C_tA_CMg_Gkxlw,313528832
28
+ nexaai/binds/nexa_llama_cpp/ggml-vulkan.dll,sha256=HmlESg2KXG_nz_xx-myRKby0tvShiIPQ4Rz_UYoWyhA,36627456
29
+ nexaai/binds/nexa_llama_cpp/ggml.dll,sha256=CrrvtnALzptI10FaGD6Vg30JW64TAMWqQ8FGbYuGG38,66560
30
+ nexaai/binds/nexa_llama_cpp/llama.dll,sha256=LAV2ZOiZ7WjJ9KtKUruX43EjOJL1wYWWGnJqY1nqWVs,1611776
31
+ nexaai/binds/nexa_llama_cpp/mtmd.dll,sha256=aD00aXCHd5ZQbVNwsM9-QpgJAFAWIdEn3HlYDLNNRdY,561152
32
+ nexaai/binds/nexa_llama_cpp/nexa_plugin.dll,sha256=QUf0eVX2WrRlC-IuvBfErb8Jt0LifHo4j3vIDA6CYi0,1405440
33
33
  nexaai/cv_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
34
  nexaai/cv_impl/mlx_cv_impl.py,sha256=QLd_8w90gtxH8kmssaDYatCTRvQNIJuUGKZNnYrmx6E,3317
35
35
  nexaai/cv_impl/pybind_cv_impl.py,sha256=aSOCAxmHrwJbEkSN6VX3Cykqlj_9RIpVrZXILul04GA,1096
@@ -40,8 +40,8 @@ nexaai/image_gen_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
40
40
  nexaai/image_gen_impl/mlx_image_gen_impl.py,sha256=peUE9ue9ApaPlZVOICBWiHtd13sY40OWQbE8EjfIUMU,11511
41
41
  nexaai/image_gen_impl/pybind_image_gen_impl.py,sha256=514RFQMSO0Rhacq0IYzlEhEr6QfaprnGew0Rjz8HZI4,3777
42
42
  nexaai/llm_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
- nexaai/llm_impl/mlx_llm_impl.py,sha256=cHy0-xa1hSh74W0ux-V7X4RHGOtTNEyE6aQ89YKntqk,11127
44
- nexaai/llm_impl/pybind_llm_impl.py,sha256=VvfIqLPy9tDfq7-HkSw-wACSKo6KV6Aw3K9_cQ6exqM,7862
43
+ nexaai/llm_impl/mlx_llm_impl.py,sha256=r9Qa1ZuduRAcRjmqo2J_zlqhprVPe3ioZtUbi7yIvYY,11426
44
+ nexaai/llm_impl/pybind_llm_impl.py,sha256=s2Cb035xDbh1ZhGNys0LRtAR6b6n4-YVKSC5voD4_Tk,8269
45
45
  nexaai/rerank_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
46
  nexaai/rerank_impl/mlx_rerank_impl.py,sha256=x8L6zCccV2I4bq4V5zAOcrWFe5Ckle7z5J_00tao8bI,3335
47
47
  nexaai/rerank_impl/pybind_rerank_impl.py,sha256=1IW925bYv4FRwZDNzf9epEzdDqR6T3OONgTLBd-cOn8,1556
@@ -53,9 +53,9 @@ nexaai/utils/decode.py,sha256=0Z9jDH4ICzw4YXj8nD4L-sMouDaev-TISGRQ4KzidWE,421
53
53
  nexaai/utils/model_manager.py,sha256=Ksl-tKq-a3miTUxEn6-SSOC_KVdn6RPjcUdkWmDDwCk,49767
54
54
  nexaai/utils/progress_tracker.py,sha256=FmJBoOlzfQdc-TmccEav0cBR_iSNrrcskG3Fm1OrEJA,15482
55
55
  nexaai/vlm_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
- nexaai/vlm_impl/mlx_vlm_impl.py,sha256=c-XGr_N270ykU3Kq0UZoUsNGz6uqGVYUW0j2lZrnXYk,10692
57
- nexaai/vlm_impl/pybind_vlm_impl.py,sha256=7BTgWAj7KAlZ3Js5CHc2-JdsMqIPQAAaEye_PiDyP84,8740
58
- nexaai-1.0.4rc16.dist-info/METADATA,sha256=cBWe2RGndeB27msPc6BGyVh-59TH0EcVHojzXF9LJ88,910
59
- nexaai-1.0.4rc16.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
60
- nexaai-1.0.4rc16.dist-info/top_level.txt,sha256=LRE2YERlrZk2vfuygnSzsEeqSknnZbz3Z1MHyNmBU4w,7
61
- nexaai-1.0.4rc16.dist-info/RECORD,,
56
+ nexaai/vlm_impl/mlx_vlm_impl.py,sha256=oY_qb9z_iF0zArBuY5CCYIvZcA3R0i_NKXrr_r-QSgg,10989
57
+ nexaai/vlm_impl/pybind_vlm_impl.py,sha256=Hu8g8OXyPn8OzLQOpRSE5lfGmhjChiKj7fMRB8mC_cI,9147
58
+ nexaai-1.0.6rc1.dist-info/METADATA,sha256=Wmc-f6LOyTwcWtuZXHXyvyXyK9Lk4FzhCMznFleFedg,1185
59
+ nexaai-1.0.6rc1.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
60
+ nexaai-1.0.6rc1.dist-info/top_level.txt,sha256=LRE2YERlrZk2vfuygnSzsEeqSknnZbz3Z1MHyNmBU4w,7
61
+ nexaai-1.0.6rc1.dist-info/RECORD,,