nexaai 1.0.4rc16__cp310-cp310-macosx_14_0_universal2.whl → 1.0.5__cp310-cp310-macosx_14_0_universal2.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.5"
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.
@@ -371,19 +371,19 @@ class LLM(BaseLLM, ProfilingMixin):
371
371
  cached_tokens = 0
372
372
 
373
373
  # Only offset prefix kv-cache at first round
374
- if is_first_round:
374
+ # if is_first_round:
375
375
 
376
- # Handle KV cache prefix offset if available
377
- if self.kv_cache is not None and len(self.kv_cache) > 0:
378
- # Get the offset from the first cache layer
379
- if hasattr(self.kv_cache[0], 'offset'):
380
- cached_tokens = self.kv_cache[0].offset - 1
376
+ # # Handle KV cache prefix offset if available
377
+ # if self.kv_cache is not None and len(self.kv_cache) > 0:
378
+ # # Get the offset from the first cache layer
379
+ # if hasattr(self.kv_cache[0], 'offset'):
380
+ # cached_tokens = self.kv_cache[0].offset - 1
381
381
 
382
- # Process only the non-cached tokens
383
- incremental_tokens = incremental_tokens[cached_tokens:] if cached_tokens > 0 else incremental_tokens
382
+ # # Process only the non-cached tokens
383
+ # incremental_tokens = incremental_tokens[cached_tokens:] if cached_tokens > 0 else incremental_tokens
384
384
 
385
- if len(incremental_tokens) == 0:
386
- raise ValueError("No tokens to process, KV cache is too long.")
385
+ # if len(incremental_tokens) == 0:
386
+ # raise ValueError("No tokens to process, KV cache is too long.")
387
387
 
388
388
  # Since apply_chat_template now returns incremental prompts, we can use the prompt directly
389
389
  # The prompt is already the incremental part based on global_n_past
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.5
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,17 +1,17 @@
1
1
  nexaai/__init__.py,sha256=jXdC4vv6DBK1fVewYTYSUhOOYfvf_Mk81UIeMGGIKUg,2029
2
- nexaai/_stub.cpython-310-darwin.so,sha256=J8U8gAiGKjmFexJuT4XWOm1k49lmsyJ-WYQJaTi6fyA,66768
3
- nexaai/_version.py,sha256=NGCgH5JHTkWsbmkVT9FhcM7m4cxgmEZiw51TUG210EA,143
2
+ nexaai/_stub.cpython-310-darwin.so,sha256=z7e7YOjkyjyalKr6u9iLGZ5YHgdvh5d5pLTwGvCCmtM,66768
3
+ nexaai/_version.py,sha256=j-3XhaOQERPf3uculltVeo9djhrsUyWzi1EY_j4wPEc,138
4
4
  nexaai/asr.py,sha256=NljMXDErwPNMOPaRkJZMEDka9Nk8xyur7L8i924TStY,2054
5
5
  nexaai/base.py,sha256=N8PRgDFA-XPku2vWnQIofQ7ipz3pPlO6f8YZGnuhquE,982
6
- nexaai/common.py,sha256=5ElYo4uDP2CT3Kqxoo7XzqcJtDBuwwbIi_Wr14aT9Z4,1659
6
+ nexaai/common.py,sha256=yBnIbqYaQYnfrl7IczOBh6MDibYZVxwaRJEglYcKgGs,3422
7
7
  nexaai/cv.py,sha256=RHCDo8gvBH8BkGZx7qVyp-OKxqi7E1GG9XzyaXehCNA,3273
8
8
  nexaai/embedder.py,sha256=Cw0tSHkPgd-RI62afCqQAcTHMnQhaI2CvfTMO-1JKOg,2452
9
9
  nexaai/image_gen.py,sha256=0C_5Tjj4BYmxLbmMmvwajp-yy2mmEEOKwBFnDQNPzx4,4356
10
- nexaai/llm.py,sha256=QQDRg8zlu-xHmWjtSOsK1vhQBHaqRIdL3T9I4cVX7W4,3416
10
+ nexaai/llm.py,sha256=S1o_k2VQoF5w2wO25f142OO1R75TP89Ii69VZv8pIGo,3567
11
11
  nexaai/rerank.py,sha256=vWaBucoQ1wz-2iYnZqyFIcEjm-4Xcs1KDbFN5X8zzDQ,1872
12
12
  nexaai/runtime.py,sha256=mxxHYsb5iBUAm2K_u-XJWr_U-spJ9S4eApc8kf9myjw,1957
13
13
  nexaai/tts.py,sha256=ZnBpWUxIfHhh7KfEjddtH7hHOTa91zg7ogGLakMIALo,2167
14
- nexaai/vlm.py,sha256=pZcMWkF2Ml9liVNbHxLqBJxwm2bxVNM1dkoelwWMyIE,4500
14
+ nexaai/vlm.py,sha256=3voXmAVnGlXnOiwA3wcX4p0Lvmp0X1VKkQVPObJdwBY,4649
15
15
  nexaai/asr_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  nexaai/asr_impl/mlx_asr_impl.py,sha256=eosd8-TIWAOwV0HltmoFrLwzXHcU4jyxtncvuZE9pgA,3257
17
17
  nexaai/asr_impl/pybind_asr_impl.py,sha256=pE9Hb_hMi5yAc4MF83bLVOb8zDtreCkB3_u7XED9YpA,1516
@@ -19,16 +19,16 @@ nexaai/binds/__init__.py,sha256=T9Ua7SzHNglSeEqXlfH5ymYXRyXhNKkC9z_y_bWCNMo,80
19
19
  nexaai/binds/common_bind.cpython-310-darwin.so,sha256=hVxY76tn7hN6uHDIgM7LWNvgoudHgNZVoaygM9X1RWE,217232
20
20
  nexaai/binds/embedder_bind.cpython-310-darwin.so,sha256=FT8581RNciilskK89PhtnNSjw4Oh0-xk8QdbJVFmOd8,202064
21
21
  nexaai/binds/libcrypto.dylib,sha256=aWif9WhTKVQhmZL3DmtIpMkZY5JSb_Ny6CClmUBKYM4,4710416
22
- nexaai/binds/libnexa_bridge.dylib,sha256=W2PFrGAVDmalbBvyECD5GTEylLut3gg99p93Fi-QaAM,251480
22
+ nexaai/binds/libnexa_bridge.dylib,sha256=g4nlxyGyVJ-LJV1cHMDg2m2pYF8fFTBBXGTPQV-lotg,251480
23
23
  nexaai/binds/libssl.dylib,sha256=Q2frAdhR729oKYuCjJOEr1Ott3idFWoFp98fwNqtIaU,881616
24
- nexaai/binds/llm_bind.cpython-310-darwin.so,sha256=Bv08rn9OBAHy01eAQeANiJSrCxskn1xSx4Gl1Vcrhm0,166064
24
+ nexaai/binds/llm_bind.cpython-310-darwin.so,sha256=3Bsq0_tGkM027-bORVeJUDl6CYZxAF9sbDIn1l31XTQ,182704
25
25
  nexaai/binds/nexa_llama_cpp/libggml-base.dylib,sha256=CzsTec_QHlvbBGzmx4MBQ4LUjG7aIqW1rP5p_A90Vds,632048
26
26
  nexaai/binds/nexa_llama_cpp/libggml-cpu.so,sha256=RiMhOv6IAWY1zkFTp0JCB7CYoPfOv54vBVQHvj1koBM,661120
27
27
  nexaai/binds/nexa_llama_cpp/libggml-metal.so,sha256=L4RQvaD0w4qBjexi4O05RMCH8842fof5QgBEvyx0RcA,673104
28
28
  nexaai/binds/nexa_llama_cpp/libggml.dylib,sha256=aOTj_6RrAMkfDO0ZI28_3nfcC-l4Y3dRCiS3C0d0_eI,58592
29
29
  nexaai/binds/nexa_llama_cpp/libllama.dylib,sha256=fDPnTG6EQ1JN6aRmnIFQzag_kmtyImRxKjMOOtaTY5Q,1746928
30
30
  nexaai/binds/nexa_llama_cpp/libmtmd.dylib,sha256=ccnBRsJNFGTCsjgW03N9PvX26wUirqpxljnxdVPINVc,587008
31
- nexaai/binds/nexa_llama_cpp/libnexa_plugin.dylib,sha256=d7s5TwlMFTGsrUifN1e6dOWxStsLFpuu6Ko6ImXZ5Sg,2368184
31
+ nexaai/binds/nexa_llama_cpp/libnexa_plugin.dylib,sha256=bZOa9K6tROVv7sfBU6JaA7WEPvuLfJljkXH37um3WSU,2368632
32
32
  nexaai/binds/nexa_mlx/libnexa_plugin.dylib,sha256=yjbdy0FpBE_RwgqvwGxd3czIfs3OYVoh--vWpn2H7RQ,1422888
33
33
  nexaai/binds/nexa_mlx/py-lib/ml.py,sha256=LafDM_TeXmuQkld2tdQxUBGgooT0JPMXngLam2TADqU,23179
34
34
  nexaai/binds/nexa_mlx/py-lib/profiling.py,sha256=Dc-mybFwBdCIKFWL7CbSHjkOJGAoYHG7r_e_XPhzwBU,9361
@@ -192,8 +192,8 @@ nexaai/image_gen_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
192
192
  nexaai/image_gen_impl/mlx_image_gen_impl.py,sha256=BuDkksvXyb4J02GsdnbGAmYckfUU0Eah6BimoMD3QqY,11219
193
193
  nexaai/image_gen_impl/pybind_image_gen_impl.py,sha256=ms34VYoD5AxZFG6cIG0QAJDjCtfphaZ1bHzKzey1xF8,3692
194
194
  nexaai/llm_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
195
- nexaai/llm_impl/mlx_llm_impl.py,sha256=2Ifc_mfTHDX64BWVHLjOhFCIMqM_Z-Cn4RfExlMtq0s,10865
196
- nexaai/llm_impl/pybind_llm_impl.py,sha256=DpO38rlGcvf0Zpe4bPKsbPD3EguBf0dDS9Ve64bgdvo,7653
195
+ nexaai/llm_impl/mlx_llm_impl.py,sha256=4v7jUFzHfE7zw2uViekGQDaTROz8A6oaW31Z3iVe6tg,11157
196
+ nexaai/llm_impl/pybind_llm_impl.py,sha256=aooqkcXZWhCo07wbSafGgBrA3WnijtnUADShjjgFsBQ,8051
197
197
  nexaai/mlx_backend/ml.py,sha256=LafDM_TeXmuQkld2tdQxUBGgooT0JPMXngLam2TADqU,23179
198
198
  nexaai/mlx_backend/profiling.py,sha256=Dc-mybFwBdCIKFWL7CbSHjkOJGAoYHG7r_e_XPhzwBU,9361
199
199
  nexaai/mlx_backend/asr/__init__.py,sha256=fuT_9_xpYJ28m4yjly5L2jChUrzlSQz-b_S7nujxkSM,451
@@ -213,7 +213,7 @@ nexaai/mlx_backend/embedding/modeling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCe
213
213
  nexaai/mlx_backend/embedding/modeling/nexa_jina_v2.py,sha256=F9Z_9r-Dh0wNThiMp5W5hqE2dt5bf4ps5_c6h4BuWGw,15218
214
214
  nexaai/mlx_backend/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
215
215
  nexaai/mlx_backend/llm/generate.py,sha256=Phes0tzxbbEWA2hDylQvD0LjorMaPwvcfZq9RKCAOt0,4399
216
- nexaai/mlx_backend/llm/interface.py,sha256=YBLAdz_5gQ1VF9o98Tuj6xB_M2nUB9kX9VkM-Mp6ryc,29310
216
+ nexaai/mlx_backend/llm/interface.py,sha256=SZFkuAUi2vxj_dSqj8RXf9vPTGMtpks_pZxxrF7iIe8,29330
217
217
  nexaai/mlx_backend/llm/main.py,sha256=gFDE4VZv_CLKMCTn0N521OfCKH_Ys26bHDh6g9VEFNc,1982
218
218
  nexaai/mlx_backend/mlx_audio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
219
219
  nexaai/mlx_backend/mlx_audio/server.py,sha256=Pqy13Fafq4WX_cTuvRFz1jq89beQm2QQGpXmhK4b9jc,17547
@@ -514,9 +514,9 @@ nexaai/utils/decode.py,sha256=61n4Zf6c5QLyqGoctEitlI9BX3tPlP2a5aaKNHbw3T4,404
514
514
  nexaai/utils/model_manager.py,sha256=c07ocxxw1IHCQw6esbmYK0dX2R2OajfEIGsC_2teHXo,48572
515
515
  nexaai/utils/progress_tracker.py,sha256=76HlPkyN41IMHSsH56-qdlN_aY_oBfJz50J16Cx67R0,15102
516
516
  nexaai/vlm_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
517
- nexaai/vlm_impl/mlx_vlm_impl.py,sha256=Dm-N38wqK3Cjdk3n7wfVGKC7hwxHvaM8pz37VzvJC-Y,10443
518
- nexaai/vlm_impl/pybind_vlm_impl.py,sha256=mvydHMHNWtkmyqouLIj1XSYZgsro3tcp3s_aqkjljE0,8510
519
- nexaai-1.0.4rc16.dist-info/METADATA,sha256=NuLsDWtJssKVjTNP4oo-tFItIBxIbiq-0hTq1rv706s,883
520
- nexaai-1.0.4rc16.dist-info/WHEEL,sha256=T2p57lol9__xkoU6aJTyN1Pm43ZpRU3q6km7mIbrAMs,114
521
- nexaai-1.0.4rc16.dist-info/top_level.txt,sha256=LRE2YERlrZk2vfuygnSzsEeqSknnZbz3Z1MHyNmBU4w,7
522
- nexaai-1.0.4rc16.dist-info/RECORD,,
517
+ nexaai/vlm_impl/mlx_vlm_impl.py,sha256=od1R1mRoIgPG3NHC7JiDlcB_YJY8aklX8Em3ZkeHNpE,10734
518
+ nexaai/vlm_impl/pybind_vlm_impl.py,sha256=5ZMFgDATthmMzjrd-vE5KX5ZAMoWPYbF_FTLz8DBKIk,8908
519
+ nexaai-1.0.5.dist-info/METADATA,sha256=fxZuww9PtpWooTJNDcf04tzwKi7AEThWyD0Z9O5a0rY,1151
520
+ nexaai-1.0.5.dist-info/WHEEL,sha256=T2p57lol9__xkoU6aJTyN1Pm43ZpRU3q6km7mIbrAMs,114
521
+ nexaai-1.0.5.dist-info/top_level.txt,sha256=LRE2YERlrZk2vfuygnSzsEeqSknnZbz3Z1MHyNmBU4w,7
522
+ nexaai-1.0.5.dist-info/RECORD,,