nexaai 1.0.4rc16__cp310-cp310-win_amd64.whl → 1.0.6__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"
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
+ }
@@ -3,7 +3,7 @@ import numpy as np
3
3
 
4
4
  from nexaai.common import PluginID
5
5
  from nexaai.embedder import Embedder, EmbeddingConfig
6
- from nexaai.mlx_backend.embedding.interface import Embedder as MLXEmbedderInterface
6
+ from nexaai.mlx_backend.embedding.interface import create_embedder
7
7
  from nexaai.mlx_backend.ml import ModelConfig as MLXModelConfig, SamplerConfig as MLXSamplerConfig, GenerationConfig as MLXGenerationConfig, EmbeddingConfig
8
8
 
9
9
 
@@ -27,11 +27,12 @@ class MLXEmbedderImpl(Embedder):
27
27
  MLXEmbedderImpl instance
28
28
  """
29
29
  try:
30
- # MLX interface is already imported
31
-
32
- # Create instance and load MLX embedder
30
+ # Create instance
33
31
  instance = cls()
34
- instance._mlx_embedder = MLXEmbedderInterface(
32
+
33
+ # Use the factory function to create the appropriate embedder based on model type
34
+ # This will automatically detect if it's JinaV2 or generic model and route correctly
35
+ instance._mlx_embedder = create_embedder(
35
36
  model_path=model_path,
36
37
  tokenizer_path=tokenizer_file
37
38
  )
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.
@@ -820,14 +820,6 @@ class HuggingFaceDownloader:
820
820
  # Create a subdirectory for this specific repo
821
821
  repo_local_dir = self._create_repo_directory(local_dir, repo_id)
822
822
 
823
- # Check if repository already exists (basic check for directory existence)
824
- if not force_download and os.path.exists(repo_local_dir) and os.listdir(repo_local_dir):
825
- print(f"✓ Repository already exists, skipping: {repo_id}")
826
- # Stop progress tracking
827
- if progress_tracker:
828
- progress_tracker.stop_tracking()
829
- return repo_local_dir
830
-
831
823
  try:
832
824
  download_kwargs = {
833
825
  'repo_id': repo_id,
@@ -107,7 +107,7 @@ class DownloadProgressTracker:
107
107
  time_diff = current_time - self.last_time
108
108
 
109
109
  # Only calculate if we have a meaningful time difference (avoid division by very small numbers)
110
- if time_diff > 0.5: # At least 500ms between measurements
110
+ if time_diff > 0.1: # At least 100ms between measurements
111
111
  bytes_diff = current_downloaded - self.last_downloaded
112
112
 
113
113
  # Only calculate speed if bytes actually changed
@@ -118,6 +118,14 @@ class DownloadProgressTracker:
118
118
  self.speed_history.append(speed)
119
119
  if len(self.speed_history) > self.max_speed_history:
120
120
  self.speed_history.pop(0)
121
+
122
+ # Update tracking variables when we actually calculate speed
123
+ self.last_downloaded = current_downloaded
124
+ self.last_time = current_time
125
+ else:
126
+ # First measurement - initialize tracking variables
127
+ self.last_downloaded = current_downloaded
128
+ self.last_time = current_time
121
129
 
122
130
  # Return the average of historical speeds if we have any
123
131
  # This ensures we show the last known speed even when skipping updates
@@ -157,13 +165,9 @@ class DownloadProgressTracker:
157
165
  total_file_sizes += data['total']
158
166
  active_file_count += 1
159
167
 
160
- # Calculate speed
168
+ # Calculate speed (tracking variables are updated internally)
161
169
  speed = self.calculate_speed(total_downloaded)
162
170
 
163
- # Update tracking variables
164
- self.last_downloaded = total_downloaded
165
- self.last_time = time.time()
166
-
167
171
  # Determine total size - prioritize pre-fetched repo size, then aggregate file sizes
168
172
  if self.total_repo_size > 0:
169
173
  # Use pre-fetched repository info if available
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.6
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,16 @@ 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: mlx-embeddings; extra == "mlx"
25
+ Requires-Dist: tokenizers; extra == "mlx"
26
+ Requires-Dist: safetensors; extra == "mlx"
27
+ Requires-Dist: Pillow; extra == "mlx"
28
+ Requires-Dist: scipy; extra == "mlx"
29
+ Requires-Dist: soundfile; extra == "mlx"
30
+ Requires-Dist: opencv-python; extra == "mlx"
31
+ Requires-Dist: shapely; extra == "mlx"
32
+ Requires-Dist: pyclipper; extra == "mlx"
@@ -1,47 +1,47 @@
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=ixiLcSG3qbpKZOzmKE4LI1qbMBRDS0ahDA4N73hfA_s,10752
3
+ nexaai/_version.py,sha256=xr9lbDfNlYCDUxvax64Rr07-umle9SxhNdf5PrLPcZc,142
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=jsvdVyvw4jrfOb7GJzYuPZ6feGueOCZJKHzuyVLJRwQ,201216
20
+ nexaai/binds/embedder_bind.cp310-win_amd64.pyd,sha256=TY3-wJB8eE2hCe5sIF8rjqBhlHayx1Bppewve3asYOo,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=7R5F5lhVcCnVHGdYF3v5nfYNORB72Mdkv2P2qPy6lvM,162816
24
+ nexaai/binds/nexa_bridge.dll,sha256=HPmi_3ah0Tfflg2c52V5LJCCE4Q0L3dyoIjHtbtrg-c,178688
25
+ nexaai/binds/nexa_llama_cpp/ggml-base.dll,sha256=q0cKUS_Ny5NZ6LSLFFDphwsEdygLYtQknctZ0rL5LPA,532480
26
+ nexaai/binds/nexa_llama_cpp/ggml-cpu.dll,sha256=5C9KSQgfKI1a-18pjKH8d1p_BZeN1Siylq5wlZMvvb4,672768
27
+ nexaai/binds/nexa_llama_cpp/ggml-cuda.dll,sha256=IZSfyCWXRnhCgj4KGrFLP_gXsohPr3zJlPRQHyORfb4,313528832
28
+ nexaai/binds/nexa_llama_cpp/ggml-vulkan.dll,sha256=fi25ekvSN45PtklozUZJJpIyYZ38DGrd9hKtUwgFFvQ,36627456
29
+ nexaai/binds/nexa_llama_cpp/ggml.dll,sha256=64D9Ls_3Vc2mf2vj7IdJcGXM0EZ3Q1o6ERd4wP_pqbQ,66560
30
+ nexaai/binds/nexa_llama_cpp/llama.dll,sha256=QQIfVffMZDoEzCwUhHDQTCOOuYzdB54toJq_cUhExoE,1611776
31
+ nexaai/binds/nexa_llama_cpp/mtmd.dll,sha256=XLlN_FZYmkoPVylASGXaSWlAPf3L0eP1ye8r0ZSO7LM,561152
32
+ nexaai/binds/nexa_llama_cpp/nexa_plugin.dll,sha256=2Ovy5zYQQ740cw5AF-xvh1qDMzNx54iF6j4XwvR0nEg,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
36
36
  nexaai/embedder_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
- nexaai/embedder_impl/mlx_embedder_impl.py,sha256=MN5vAGohgyEreLn3H7dg2JeWp2v8emLhrfIDGndk-us,4498
37
+ nexaai/embedder_impl/mlx_embedder_impl.py,sha256=Kzd-veLNl95FbI2oEJMtr6qKbjtPDDajzsGUVjJfTRA,4598
38
38
  nexaai/embedder_impl/pybind_embedder_impl.py,sha256=FoLsUrzF5cNtEsSFchPlapkdqLGFOUGNPx0Kc8hdCvA,3589
39
39
  nexaai/image_gen_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
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
@@ -50,12 +50,12 @@ nexaai/tts_impl/mlx_tts_impl.py,sha256=LcH9bVdIl3Q6lOzSUB_X2s-_nWFmlCl1yL7XSUK0f
50
50
  nexaai/tts_impl/pybind_tts_impl.py,sha256=n3z4zmPQayQJgAwcvETw0IBUCp8IYROuYFSg0tAy_8Y,1487
51
51
  nexaai/utils/avatar_fetcher.py,sha256=D01f8je-37Nd68zGw8MYK2m7y3fvGlC6h0KR-aN9kdU,3925
52
52
  nexaai/utils/decode.py,sha256=0Z9jDH4ICzw4YXj8nD4L-sMouDaev-TISGRQ4KzidWE,421
53
- nexaai/utils/model_manager.py,sha256=Ksl-tKq-a3miTUxEn6-SSOC_KVdn6RPjcUdkWmDDwCk,49767
54
- nexaai/utils/progress_tracker.py,sha256=FmJBoOlzfQdc-TmccEav0cBR_iSNrrcskG3Fm1OrEJA,15482
53
+ nexaai/utils/model_manager.py,sha256=up1XFhefax7PJuAZnlKz9Ws2Tfq-alKOFOCKGRIRBQM,49344
54
+ nexaai/utils/progress_tracker.py,sha256=1emMhW5D-_O0ZnMQERXvpedchsFVPOk03jYAy4nqRJs,15788
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.6.dist-info/METADATA,sha256=jHbKP4pRUM150VRZuTSljyxvZ5_wayIusQ2bmhuqcp4,1229
59
+ nexaai-1.0.6.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
60
+ nexaai-1.0.6.dist-info/top_level.txt,sha256=LRE2YERlrZk2vfuygnSzsEeqSknnZbz3Z1MHyNmBU4w,7
61
+ nexaai-1.0.6.dist-info/RECORD,,