nexaai 1.0.20__cp310-cp310-win_amd64.whl → 1.0.21__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.

Files changed (53) hide show
  1. nexaai/__init__.py +12 -0
  2. nexaai/_stub.cp310-win_amd64.pyd +0 -0
  3. nexaai/_version.py +1 -1
  4. nexaai/asr.py +10 -6
  5. nexaai/asr_impl/pybind_asr_impl.py +98 -15
  6. nexaai/binds/__init__.py +2 -0
  7. nexaai/binds/asr_bind.cp310-win_amd64.pyd +0 -0
  8. nexaai/binds/common_bind.cp310-win_amd64.pyd +0 -0
  9. nexaai/binds/cpu_gpu/ggml-base.dll +0 -0
  10. nexaai/binds/cpu_gpu/ggml-cpu.dll +0 -0
  11. nexaai/binds/cpu_gpu/ggml-cuda.dll +0 -0
  12. nexaai/binds/cpu_gpu/ggml-vulkan.dll +0 -0
  13. nexaai/binds/cpu_gpu/ggml.dll +0 -0
  14. nexaai/binds/cpu_gpu/mtmd.dll +0 -0
  15. nexaai/binds/cpu_gpu/nexa_cpu_gpu.dll +0 -0
  16. nexaai/binds/cpu_gpu/nexa_plugin.dll +0 -0
  17. nexaai/binds/embedder_bind.cp310-win_amd64.pyd +0 -0
  18. nexaai/binds/llm_bind.cp310-win_amd64.pyd +0 -0
  19. nexaai/binds/nexa_bridge.dll +0 -0
  20. nexaai/binds/nexaml/ggml-base.dll +0 -0
  21. nexaai/binds/nexaml/ggml-cpu.dll +0 -0
  22. nexaai/binds/nexaml/ggml-cuda.dll +0 -0
  23. nexaai/binds/nexaml/ggml-vulkan.dll +0 -0
  24. nexaai/binds/nexaml/ggml.dll +0 -0
  25. nexaai/binds/nexaml/nexa_plugin.dll +0 -0
  26. nexaai/binds/nexaml/nexaproc.dll +0 -0
  27. nexaai/binds/nexaml/qwen3-vl.dll +0 -0
  28. nexaai/binds/rerank_bind.cp310-win_amd64.pyd +0 -0
  29. nexaai/binds/vlm_bind.cp310-win_amd64.pyd +0 -0
  30. nexaai/common.py +1 -0
  31. nexaai/cv.py +2 -1
  32. nexaai/embedder.py +4 -3
  33. nexaai/embedder_impl/mlx_embedder_impl.py +3 -1
  34. nexaai/embedder_impl/pybind_embedder_impl.py +3 -2
  35. nexaai/image_gen.py +2 -1
  36. nexaai/llm.py +5 -3
  37. nexaai/llm_impl/mlx_llm_impl.py +2 -0
  38. nexaai/llm_impl/pybind_llm_impl.py +2 -0
  39. nexaai/rerank.py +5 -3
  40. nexaai/rerank_impl/mlx_rerank_impl.py +2 -0
  41. nexaai/rerank_impl/pybind_rerank_impl.py +109 -16
  42. nexaai/runtime_error.py +24 -0
  43. nexaai/tts.py +2 -1
  44. nexaai/utils/manifest_utils.py +10 -6
  45. nexaai/utils/model_manager.py +139 -8
  46. nexaai/vlm.py +4 -2
  47. nexaai/vlm_impl/mlx_vlm_impl.py +3 -2
  48. nexaai/vlm_impl/pybind_vlm_impl.py +33 -7
  49. {nexaai-1.0.20.dist-info → nexaai-1.0.21.dist-info}/METADATA +1 -2
  50. nexaai-1.0.21.dist-info/RECORD +79 -0
  51. nexaai-1.0.20.dist-info/RECORD +0 -76
  52. {nexaai-1.0.20.dist-info → nexaai-1.0.21.dist-info}/WHEEL +0 -0
  53. {nexaai-1.0.20.dist-info → nexaai-1.0.21.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,24 @@
1
+ """Runtime errors for Nexa SDK operations."""
2
+
3
+
4
+ class NexaRuntimeError(Exception):
5
+ """Base class for Nexa runtime errors."""
6
+
7
+ def __init__(self, message: str, error_code: int = None):
8
+ self.error_code = error_code
9
+ super().__init__(message)
10
+
11
+
12
+ class ContextLengthExceededError(NexaRuntimeError):
13
+ """Raised when the input context length exceeds the model's maximum."""
14
+
15
+ def __init__(self, message: str = "Input context length exceeded model's maximum", error_code: int = None):
16
+ super().__init__(message, error_code)
17
+
18
+
19
+ class GenerationError(NexaRuntimeError):
20
+ """Raised when generation fails."""
21
+
22
+ def __init__(self, message: str = "Generation failed", error_code: int = None):
23
+ super().__init__(message, error_code)
24
+
nexaai/tts.py CHANGED
@@ -45,7 +45,8 @@ class TTS(BaseModel):
45
45
  model_path: str,
46
46
  vocoder_path: str,
47
47
  plugin_id: Union[PluginID, str] = PluginID.LLAMA_CPP,
48
- device_id: Optional[str] = None
48
+ device_id: Optional[str] = None,
49
+ **kwargs
49
50
  ) -> 'TTS':
50
51
  """Load TTS model from local path, routing to appropriate implementation."""
51
52
  # Check plugin_id value for routing - handle both enum and string
@@ -157,12 +157,16 @@ def create_gguf_manifest(repo_id: str, files: List[str], directory_path: str, ol
157
157
  # Use the new enum-based quantization extraction
158
158
  quantization_type = extract_quantization_from_filename(current_file_name)
159
159
  quant_level = quantization_type.value if quantization_type else "UNKNOWN"
160
-
161
- model_files[quant_level] = {
162
- "Name": current_file_name,
163
- "Downloaded": True,
164
- "Size": file_size
165
- }
160
+
161
+ # FIXME: hardcode to handle the multiple mmproj files problem
162
+ if quant_level == "UNKNOWN" and "mmproj" in current_file_name.lower():
163
+ pass
164
+ else:
165
+ model_files[quant_level] = {
166
+ "Name": current_file_name,
167
+ "Downloaded": True,
168
+ "Size": file_size
169
+ }
166
170
 
167
171
  # Determine PluginId with priority: kwargs > downloaded_manifest > model_file_type > default
168
172
  plugin_id = kwargs.get('plugin_id')
@@ -410,6 +410,20 @@ def _remove_specific_file(target_model: DownloadedModel, file_name: str, local_d
410
410
  except OSError:
411
411
  file_size = 0
412
412
 
413
+ # Check if we should remove entire folder instead (for .gguf files)
414
+ # If removing a .gguf file and no other non-mmproj .gguf files remain, remove entire folder
415
+ if file_name.endswith('.gguf'):
416
+ updated_files = [f for f in target_model.files if f != file_name]
417
+ # Find remaining .gguf files that don't contain "mmproj" in filename
418
+ remaining_non_mmproj_gguf = [
419
+ f for f in updated_files
420
+ if f.endswith('.gguf') and 'mmproj' not in f.lower()
421
+ ]
422
+
423
+ # If no non-mmproj .gguf files remain, remove entire repository
424
+ if len(remaining_non_mmproj_gguf) == 0:
425
+ return _remove_entire_repository(target_model, local_dir)
426
+
413
427
  # Remove the file
414
428
  try:
415
429
  os.remove(file_path)
@@ -846,6 +860,41 @@ class HuggingFaceDownloader:
846
860
  pass
847
861
  return {}
848
862
 
863
+ def _download_manifest_if_needed(self, repo_id: str, local_dir: str) -> bool:
864
+ """
865
+ Download nexa.manifest from the repository if it doesn't exist locally.
866
+
867
+ Args:
868
+ repo_id: Repository ID
869
+ local_dir: Local directory where the manifest should be saved
870
+
871
+ Returns:
872
+ bool: True if manifest was downloaded or already exists, False if not found in repo
873
+ """
874
+ manifest_path = os.path.join(local_dir, 'nexa.manifest')
875
+
876
+ # Check if manifest already exists locally
877
+ if os.path.exists(manifest_path):
878
+ return True
879
+
880
+ # Try to download nexa.manifest from the repository
881
+ try:
882
+ print(f"[INFO] Attempting to download nexa.manifest from {repo_id}...")
883
+ self.api.hf_hub_download(
884
+ repo_id=repo_id,
885
+ filename='nexa.manifest',
886
+ local_dir=local_dir,
887
+ local_dir_use_symlinks=False,
888
+ token=self.token,
889
+ force_download=False
890
+ )
891
+ print(f"[OK] Successfully downloaded nexa.manifest from {repo_id}")
892
+ return True
893
+ except Exception as e:
894
+ # Manifest doesn't exist in repo or other error - this is fine, we'll create it
895
+ print(f"[INFO] nexa.manifest not found in {repo_id}, will create locally")
896
+ return False
897
+
849
898
  def _fetch_and_save_metadata(self, repo_id: str, local_dir: str, is_mmproj: bool = False, file_name: Optional[Union[str, List[str]]] = None, **kwargs) -> None:
850
899
  """Fetch model info and save metadata after successful download."""
851
900
  # Initialize metadata with defaults to ensure manifest is always created
@@ -946,6 +995,9 @@ class HuggingFaceDownloader:
946
995
  if progress_tracker:
947
996
  progress_tracker.stop_tracking()
948
997
 
998
+ # Download nexa.manifest from repo if it doesn't exist locally
999
+ self._download_manifest_if_needed(repo_id, file_local_dir)
1000
+
949
1001
  # Save metadata after successful download
950
1002
  self._fetch_and_save_metadata(repo_id, file_local_dir, self._current_is_mmproj, self._current_file_name, **kwargs)
951
1003
 
@@ -1055,6 +1107,9 @@ class HuggingFaceDownloader:
1055
1107
  if progress_tracker:
1056
1108
  progress_tracker.stop_tracking()
1057
1109
 
1110
+ # Download nexa.manifest from repo if it doesn't exist locally
1111
+ self._download_manifest_if_needed(repo_id, repo_local_dir)
1112
+
1058
1113
  # Save metadata after successful download
1059
1114
  self._fetch_and_save_metadata(repo_id, repo_local_dir, self._current_is_mmproj, self._current_file_name, **kwargs)
1060
1115
 
@@ -1289,7 +1344,7 @@ def _download_model_if_needed(
1289
1344
  token: Union[bool, str, None] = None,
1290
1345
  is_mmproj: bool = False,
1291
1346
  **kwargs
1292
- ) -> str:
1347
+ ) -> tuple[str, Optional[str], Optional[str]]:
1293
1348
  """
1294
1349
  Helper function to download a model from HuggingFace if it doesn't exist locally.
1295
1350
 
@@ -1300,15 +1355,78 @@ def _download_model_if_needed(
1300
1355
  token: HuggingFace authentication token for private repositories
1301
1356
 
1302
1357
  Returns:
1303
- str: Local path to the model (either existing or downloaded)
1358
+ tuple[str, Optional[str], Optional[str]]: Tuple of (local_path, model_name, plugin_id)
1359
+ - local_path: Local path to the model (either existing or downloaded)
1360
+ - model_name: ModelName from nexa.manifest if available, None otherwise
1361
+ - plugin_id: PluginId from nexa.manifest if available, None otherwise
1304
1362
 
1305
1363
  Raises:
1306
1364
  RuntimeError: If download fails
1307
1365
  """
1366
+ # Helper function to extract model info from manifest
1367
+ def _extract_info_from_manifest(path: str) -> tuple[Optional[str], Optional[str], Optional[dict]]:
1368
+ """Extract ModelName, PluginId, and full manifest from nexa.manifest if it exists."""
1369
+ # If path is a file, check its parent directory for manifest
1370
+ if os.path.isfile(path):
1371
+ manifest_dir = os.path.dirname(path)
1372
+ else:
1373
+ manifest_dir = path
1374
+
1375
+ manifest_path = os.path.join(manifest_dir, 'nexa.manifest')
1376
+ if not os.path.exists(manifest_path):
1377
+ return None, None, None
1378
+
1379
+ try:
1380
+ with open(manifest_path, 'r', encoding='utf-8') as f:
1381
+ manifest = json.load(f)
1382
+ return manifest.get('ModelName'), manifest.get('PluginId'), manifest
1383
+ except (json.JSONDecodeError, IOError):
1384
+ return None, None, None
1385
+
1386
+ # Helper function to get a model file path from manifest
1387
+ # Note: Tnis is for NPU only, because when downloading, it is a directory; when passing local path to inference, it needs to be a file.
1388
+ def _get_model_file_from_manifest(manifest: dict, base_dir: str) -> Optional[str]:
1389
+ """Extract a model file path from manifest's ModelFile section."""
1390
+ if not manifest or 'ModelFile' not in manifest:
1391
+ return None
1392
+
1393
+ model_files = manifest['ModelFile']
1394
+ # Find the first valid model file (skip N/A entries and metadata files)
1395
+ for key, file_info in model_files.items():
1396
+ if key == 'N/A':
1397
+ continue
1398
+ if isinstance(file_info, dict) and 'Name' in file_info:
1399
+ file_name = file_info['Name']
1400
+ # Skip common non-model files
1401
+ if file_name and not file_name.startswith('.') and file_name.endswith('.nexa'):
1402
+ file_path = os.path.join(base_dir, file_name)
1403
+ if os.path.exists(file_path):
1404
+ return file_path
1405
+
1406
+ # If no .nexa files found, try ExtraFiles for .nexa files
1407
+ if 'ExtraFiles' in manifest:
1408
+ for file_info in manifest['ExtraFiles']:
1409
+ if isinstance(file_info, dict) and 'Name' in file_info:
1410
+ file_name = file_info['Name']
1411
+ if file_name and file_name.endswith('.nexa') and not file_name.startswith('.cache'):
1412
+ file_path = os.path.join(base_dir, file_name)
1413
+ if os.path.exists(file_path):
1414
+ return file_path
1415
+
1416
+ return None
1417
+
1308
1418
  # Check if model_path exists locally (file or directory)
1309
1419
  if os.path.exists(model_path):
1310
- # Local path exists, return as-is
1311
- return model_path
1420
+ # Local path exists, try to extract model info
1421
+ model_name, plugin_id, manifest = _extract_info_from_manifest(model_path)
1422
+
1423
+ # If PluginId is "npu" and path is a directory, convert to file path
1424
+ if plugin_id == "npu" and os.path.isdir(model_path):
1425
+ model_file_path = _get_model_file_from_manifest(manifest, model_path)
1426
+ if model_file_path:
1427
+ model_path = model_file_path
1428
+
1429
+ return model_path, model_name, plugin_id
1312
1430
 
1313
1431
  # Model path doesn't exist locally, try to download from HuggingFace
1314
1432
  try:
@@ -1328,7 +1446,16 @@ def _download_model_if_needed(
1328
1446
  **kwargs
1329
1447
  )
1330
1448
 
1331
- return downloaded_path
1449
+ # Extract model info from the downloaded manifest
1450
+ model_name, plugin_id, manifest = _extract_info_from_manifest(downloaded_path)
1451
+
1452
+ # If PluginId is "npu" and path is a directory, convert to file path
1453
+ if plugin_id == "npu" and os.path.isdir(downloaded_path):
1454
+ model_file_path = _get_model_file_from_manifest(manifest, downloaded_path)
1455
+ if model_file_path:
1456
+ downloaded_path = model_file_path
1457
+
1458
+ return downloaded_path, model_name, plugin_id
1332
1459
 
1333
1460
  except Exception as e:
1334
1461
  # Only handle download-related errors
@@ -1397,7 +1524,7 @@ def auto_download_model(func: Callable) -> Callable:
1397
1524
  # Download name_or_path if needed
1398
1525
  if name_or_path is not None:
1399
1526
  try:
1400
- downloaded_name_path = _download_model_if_needed(
1527
+ downloaded_name_path, model_name, plugin_id = _download_model_if_needed(
1401
1528
  name_or_path, 'name_or_path', progress_callback, token, **kwargs
1402
1529
  )
1403
1530
 
@@ -1408,6 +1535,10 @@ def auto_download_model(func: Callable) -> Callable:
1408
1535
  args = tuple(args_list)
1409
1536
  else:
1410
1537
  kwargs['name_or_path'] = downloaded_name_path
1538
+
1539
+ # Add model_name to kwargs if it exists and not already set
1540
+ if model_name is not None and 'model_name' not in kwargs:
1541
+ kwargs['model_name'] = model_name
1411
1542
 
1412
1543
  except Exception as e:
1413
1544
  raise e # Re-raise the error from _download_model_if_needed
@@ -1415,7 +1546,7 @@ def auto_download_model(func: Callable) -> Callable:
1415
1546
  # Download mmproj_path if needed
1416
1547
  if mmproj_path is not None:
1417
1548
  try:
1418
- downloaded_mmproj_path = _download_model_if_needed(
1549
+ downloaded_mmproj_path, _, _ = _download_model_if_needed(
1419
1550
  mmproj_path, 'mmproj_path', progress_callback, token, is_mmproj=True, **kwargs
1420
1551
  )
1421
1552
 
@@ -1427,5 +1558,5 @@ def auto_download_model(func: Callable) -> Callable:
1427
1558
 
1428
1559
  # Call original function with updated paths (outside try-catch to let model creation errors bubble up)
1429
1560
  return func(*args, **kwargs)
1430
-
1561
+
1431
1562
  return wrapper
nexaai/vlm.py CHANGED
@@ -22,7 +22,8 @@ class VLM(BaseModel):
22
22
  model_name: Optional[str] = None,
23
23
  m_cfg: ModelConfig = ModelConfig(),
24
24
  plugin_id: Union[PluginID, str] = PluginID.LLAMA_CPP,
25
- device_id: Optional[str] = None
25
+ device_id: Optional[str] = None,
26
+ **kwargs
26
27
  ) -> 'VLM':
27
28
  """Load VLM model from local path, routing to appropriate implementation.
28
29
 
@@ -99,7 +100,8 @@ class VLM(BaseModel):
99
100
  def apply_chat_template(
100
101
  self,
101
102
  messages: List[MultiModalMessage],
102
- tools: Optional[List[Dict[str, Any]]] = None
103
+ tools: Optional[List[Dict[str, Any]]] = None,
104
+ enable_thinking: bool = True
103
105
  ) -> str:
104
106
  """Apply the chat template to multimodal messages."""
105
107
  pass
@@ -72,7 +72,8 @@ class MlxVlmImpl(VLM):
72
72
  def apply_chat_template(
73
73
  self,
74
74
  messages: List[MultiModalMessage],
75
- tools: Optional[List[Dict[str, Any]]] = None
75
+ tools: Optional[List[Dict[str, Any]]] = None,
76
+ enable_thinking: bool = True
76
77
  ) -> str:
77
78
  """Apply the chat template to multimodal messages."""
78
79
  if not self._mlx_vlm:
@@ -116,7 +117,7 @@ class MlxVlmImpl(VLM):
116
117
  num_images=total_images,
117
118
  num_audios=total_audios,
118
119
  tools=tools,
119
- enable_thinking=False # Default to False, could be made configurable
120
+ enable_thinking=enable_thinking
120
121
  )
121
122
  else:
122
123
  # Use regular apply_chat_template for text-only messages
@@ -8,6 +8,11 @@ from nexaai.binds import vlm_bind, common_bind
8
8
  from nexaai.runtime import _ensure_runtime
9
9
  from nexaai.vlm import VLM
10
10
  from nexaai.base import ProfilingData
11
+ from nexaai.runtime_error import ContextLengthExceededError, GenerationError
12
+
13
+ # Error codes from ml.h
14
+ ML_SUCCESS = 0
15
+ ML_ERROR_LLM_TOKENIZATION_CONTEXT_LENGTH = -200004
11
16
 
12
17
 
13
18
  class PyBindVLMImpl(VLM):
@@ -68,7 +73,7 @@ class PyBindVLMImpl(VLM):
68
73
  handle = vlm_bind.create_vlm(
69
74
  model_path=local_path,
70
75
  mmproj_path=mmproj_path,
71
- # model_name=model_name, # TODO: enable model_name in pybind later
76
+ model_name=model_name,
72
77
  model_config=config,
73
78
  plugin_id=plugin_id_str,
74
79
  device_id=device_id
@@ -91,7 +96,8 @@ class PyBindVLMImpl(VLM):
91
96
  def apply_chat_template(
92
97
  self,
93
98
  messages: List[MultiModalMessage],
94
- tools: Optional[List[Dict[str, Any]]] = None
99
+ tools: Optional[List[Dict[str, Any]]] = None,
100
+ enable_thinking: bool = True
95
101
  ) -> str:
96
102
  """Apply the chat template to multimodal messages."""
97
103
  payload = []
@@ -103,15 +109,14 @@ class PyBindVLMImpl(VLM):
103
109
  t = c["type"]
104
110
  if t == "text":
105
111
  blocks.append({"type": "text", "text": c.get("text","") or ""})
106
- elif t == "image":
107
- # Pass through the original structure - let vlm-bind.cpp handle field extraction
108
- blocks.append(c)
109
112
  else:
110
- raise ValueError(f"Unsupported content type: {t}. Use 'text' or 'image' to match the golden reference in vlm.cpp")
113
+ # Pass through the original structure for image, audio, and any other types
114
+ # Let vlm-bind.cpp handle field extraction (text/url/path)
115
+ blocks.append(c)
111
116
 
112
117
  payload.append({"role": role, "content": blocks})
113
118
 
114
- result = vlm_bind.ml_vlm_apply_chat_template(self._handle, payload, tools)
119
+ result = vlm_bind.ml_vlm_apply_chat_template(self._handle, payload, tools, enable_thinking)
115
120
  return result
116
121
 
117
122
  def generate_stream(self, prompt: str, g_cfg: GenerationConfig = GenerationConfig()) -> Generator[str, None, None]:
@@ -143,6 +148,18 @@ class PyBindVLMImpl(VLM):
143
148
  on_token=on_token,
144
149
  user_data=None
145
150
  )
151
+
152
+ # Check for errors in result
153
+ error_code = result.get("error_code", ML_SUCCESS)
154
+ if error_code != ML_SUCCESS:
155
+ error_message = result.get("error_message", "Unknown error")
156
+ if error_code == ML_ERROR_LLM_TOKENIZATION_CONTEXT_LENGTH:
157
+ exception_container[0] = ContextLengthExceededError(error_message, error_code)
158
+ else:
159
+ exception_container[0] = GenerationError(error_message, error_code)
160
+ token_queue.put(('end', None))
161
+ return
162
+
146
163
  self._profiling_data = ProfilingData.from_dict(result.get("profile_data", {}))
147
164
  except Exception as e:
148
165
  exception_container[0] = e
@@ -186,6 +203,15 @@ class PyBindVLMImpl(VLM):
186
203
  user_data=None
187
204
  )
188
205
 
206
+ # Check for errors in result
207
+ error_code = result.get("error_code", ML_SUCCESS)
208
+ if error_code != ML_SUCCESS:
209
+ error_message = result.get("error_message", "Unknown error")
210
+ if error_code == ML_ERROR_LLM_TOKENIZATION_CONTEXT_LENGTH:
211
+ raise ContextLengthExceededError(error_message, error_code)
212
+ else:
213
+ raise GenerationError(error_message, error_code)
214
+
189
215
  self._profiling_data = ProfilingData.from_dict(result.get("profile_data", {}))
190
216
  return result.get("text", "")
191
217
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nexaai
3
- Version: 1.0.20
3
+ Version: 1.0.21
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
@@ -14,7 +14,6 @@ Requires-Python: >=3.7
14
14
  Description-Content-Type: text/markdown
15
15
  Requires-Dist: huggingface_hub
16
16
  Requires-Dist: tqdm
17
- Requires-Dist: hf_xet
18
17
  Requires-Dist: numpy
19
18
  Requires-Dist: httpx
20
19
  Provides-Extra: mlx
@@ -0,0 +1,79 @@
1
+ nexaai/__init__.py,sha256=Yt2YPVcRfwdA6DQoUR4ZI34CHBUYoY2cVsrG7Zp6IrI,2516
2
+ nexaai/_stub.cp310-win_amd64.pyd,sha256=_QbFX3wuGKK6K-BSlRZsT36BQSQcjCfVyrxNQ4HayMY,10752
3
+ nexaai/_version.py,sha256=i_1Tr2pxCUBFuFhyyzXbVSdeA2pezaJC9mGecjSiUTg,143
4
+ nexaai/asr.py,sha256=p_bTRqESa-4g6V3HGFzi8vqn8H4Q6yTLiLjL0yqVr3I,2362
5
+ nexaai/base.py,sha256=qQBCiQVNzgpkQjZX9aiFDEdbAAe56TROKC3WnWra2Zg,1021
6
+ nexaai/common.py,sha256=XRwjvRNxS2xRVb0CMR5NbPQ4E-PAewJ0m6VGbZOw19A,3565
7
+ nexaai/cv.py,sha256=PhgqK5hO8FlXLR6QxE_pHtXjdtzLSEPzkCda-qrNpOs,3395
8
+ nexaai/embedder.py,sha256=fzIdlE52SSVNurIFZgf9gKtRf2SXysARsETQmkiCWs0,2625
9
+ nexaai/image_gen.py,sha256=_kLLCbvhc30a-YGidkB13ZXYoPOS-sKMo8bKVRkUado,4526
10
+ nexaai/llm.py,sha256=woB98NQmaNf3_BH0Ogig3niU1rcD8YtHPiSpzyrbVmo,3771
11
+ nexaai/log.py,sha256=F_Qe169kLbnFV25WJmS_ZtmBfOdcGic8BYFIsYVoD_o,2720
12
+ nexaai/rerank.py,sha256=kzNpC3RG6fr1WnG60fm0ixuORBeG7gq90h6BnS9vIK4,2025
13
+ nexaai/runtime.py,sha256=_BoAtTUv5ZR7wtOlJL5TldR3AZTP0OnMWjB9p71k-8E,2135
14
+ nexaai/runtime_error.py,sha256=7TvjMJO7MpvVRQCYEDwcFPOgZsIILQtN-ZJ74JlARrE,803
15
+ nexaai/tts.py,sha256=5lEzv50Q5iLTNHLg3kX-4J_mi1T_t-rVdZzOwd6sALY,2271
16
+ nexaai/vlm.py,sha256=uglZ5g0VFizwIYOYjXg-LNrr5baFanTRlAppEkkF-Yw,4929
17
+ nexaai/asr_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ nexaai/asr_impl/mlx_asr_impl.py,sha256=XwMX3LYMeulp8cDS0TCCYcjvttFHAyDWQ_oMvABwQmI,3349
19
+ nexaai/asr_impl/pybind_asr_impl.py,sha256=I-J_pp4Tdafa-ipp34q2dN4dbL905nlpBYVBGLQwLVI,4807
20
+ nexaai/binds/__init__.py,sha256=cDlzRJF5pq0YmiwmUvdNO9CrvYrBdkYWR4xXrEbwLyU,161
21
+ nexaai/binds/asr_bind.cp310-win_amd64.pyd,sha256=SlrRkDL0NcDbOurVMpMYjKBYSZOw92x3gVA35lkmk9w,192000
22
+ nexaai/binds/common_bind.cp310-win_amd64.pyd,sha256=BFC93AlT1-xeemnp8KY4oQht0CF7cmEcMx74gd_ZaWA,205824
23
+ nexaai/binds/embedder_bind.cp310-win_amd64.pyd,sha256=sFdwwzXBZeWbovrIlz86mc84YlunU57UaYOuT57cJNM,183808
24
+ nexaai/binds/libcrypto-3-x64.dll,sha256=X7hDuQPMn6eRe58dTGJxTmRPKFWgd5i6Gjoy9QPLmPg,7315968
25
+ nexaai/binds/libssl-3-x64.dll,sha256=GRw0cOaGUaR2QHRvBFuU_9S9iNgkyVgm0NIpZMnReAw,1313792
26
+ nexaai/binds/llm_bind.cp310-win_amd64.pyd,sha256=MfSPKQ7eqOUXXknXDE4lR7NRv20UQbaQzbtzLX-C-AE,163840
27
+ nexaai/binds/nexa_bridge.dll,sha256=VwFs7iWC5DR0-O3m6jH66MjwEU_X7depcwWsUt7x7II,190976
28
+ nexaai/binds/rerank_bind.cp310-win_amd64.pyd,sha256=AdTNfqvHF7RGJQHr4dYBeMLIw2HG0TMx8zPcxLJWRZQ,178176
29
+ nexaai/binds/vlm_bind.cp310-win_amd64.pyd,sha256=Fa63mi-qBbS96JYSVvQ2dH3sdtLFAQ6XToE8C17DWQY,171520
30
+ nexaai/binds/cpu_gpu/ggml-base.dll,sha256=x7EWkh8cQpKi6b4lZ8RI4Vu7gWZwzyil6z5FgIS1ZUc,532480
31
+ nexaai/binds/cpu_gpu/ggml-cpu.dll,sha256=UPVtRw9rjHE3vmjGHy9lpLgtkpRd2O38BerNX4XKxq8,672768
32
+ nexaai/binds/cpu_gpu/ggml-cuda.dll,sha256=nOsSFjXZ4K2DoDI0SOjVU3idv-BJCX590KuUoLkEb7o,313528832
33
+ nexaai/binds/cpu_gpu/ggml-vulkan.dll,sha256=4ZiBpWZTaUbHPHfax-PjSmTXyCMDpEMIcFIU-SheKGs,36627968
34
+ nexaai/binds/cpu_gpu/ggml.dll,sha256=T9GTViGQInMb7JlBAasURiNjf8Q2RBr9ug7SprXqMmA,66560
35
+ nexaai/binds/cpu_gpu/mtmd.dll,sha256=r-YFHScZ_EcuzTsYHCr4stGvgfkYDnIPNrJm-6Fygfs,561152
36
+ nexaai/binds/cpu_gpu/nexa_cpu_gpu.dll,sha256=fys-UB42teAkZshFHV4B8186JAM_gta9b_m6XqOWK7w,1611776
37
+ nexaai/binds/cpu_gpu/nexa_plugin.dll,sha256=-QYXwum-B-GX8FwxquwwwBnZ9IzKCwH4ufocGPR4iYc,1424384
38
+ nexaai/binds/nexaml/ggml-base.dll,sha256=x7EWkh8cQpKi6b4lZ8RI4Vu7gWZwzyil6z5FgIS1ZUc,532480
39
+ nexaai/binds/nexaml/ggml-cpu.dll,sha256=UPVtRw9rjHE3vmjGHy9lpLgtkpRd2O38BerNX4XKxq8,672768
40
+ nexaai/binds/nexaml/ggml-cuda.dll,sha256=nOsSFjXZ4K2DoDI0SOjVU3idv-BJCX590KuUoLkEb7o,313528832
41
+ nexaai/binds/nexaml/ggml-vulkan.dll,sha256=4ZiBpWZTaUbHPHfax-PjSmTXyCMDpEMIcFIU-SheKGs,36627968
42
+ nexaai/binds/nexaml/ggml.dll,sha256=T9GTViGQInMb7JlBAasURiNjf8Q2RBr9ug7SprXqMmA,66560
43
+ nexaai/binds/nexaml/nexa-mm-process.dll,sha256=DDD5qPbelZAIrRWGggOd3Pg9U_fh_ZEYIplwqiyD5LY,4643328
44
+ nexaai/binds/nexaml/nexa-sampling.dll,sha256=Notkz287laSUG2_ED3oFXWVLJM3t7x_USkvX6wKVOLA,4265984
45
+ nexaai/binds/nexaml/nexa_plugin.dll,sha256=DTM4Q6gFd0X1TELi_sB8GOJ0muj9HNOpSK2ddlhkJ1c,604160
46
+ nexaai/binds/nexaml/nexaproc.dll,sha256=rRcdSfhkxnRwktXW4lp7Np8sNY_uefNXYwAmPp34AHg,2670080
47
+ nexaai/binds/nexaml/qwen3-vl.dll,sha256=k0wPZNR6VejeR32KuFgCVyj7t7YaEmZOKhj9lwMw0-s,5874176
48
+ nexaai/binds/nexaml/qwen3vl-vision.dll,sha256=5AX4MtAOWTcXSAkS2qqvl2pFti4HR55dtkCaOO03Evc,1063424
49
+ nexaai/cv_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
+ 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/embedder_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
+ nexaai/embedder_impl/mlx_embedder_impl.py,sha256=WWTQrUWEMq1kLGg4CBQyu59zD2hIptghVEQXQAcx7hM,4757
54
+ nexaai/embedder_impl/pybind_embedder_impl.py,sha256=Xsf4nczEzpRDqdx96DEu5GwLxGcSV06ZVnEV3a5-q68,3749
55
+ nexaai/image_gen_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
+ nexaai/image_gen_impl/mlx_image_gen_impl.py,sha256=peUE9ue9ApaPlZVOICBWiHtd13sY40OWQbE8EjfIUMU,11511
57
+ nexaai/image_gen_impl/pybind_image_gen_impl.py,sha256=514RFQMSO0Rhacq0IYzlEhEr6QfaprnGew0Rjz8HZI4,3777
58
+ nexaai/llm_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
+ nexaai/llm_impl/mlx_llm_impl.py,sha256=qJY0zwb6jfVFQnTsp1W7BDnIMdgcJlqnU5UJgSoU-Vs,11567
60
+ nexaai/llm_impl/pybind_llm_impl.py,sha256=zzZZ2FovnNn9EJxjovNhLI_SDjt3MAXMi8jsR6N57Ng,8359
61
+ nexaai/rerank_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
+ nexaai/rerank_impl/mlx_rerank_impl.py,sha256=fZtf9lKT6dCiiFUmRkm4EDWRPTkRBl7pG3mHEZMp6_o,3471
63
+ nexaai/rerank_impl/pybind_rerank_impl.py,sha256=_1pkeD76kZK-S-2IFJzRxvxvQdgoS3Yi2WhIbWq4bxU,4626
64
+ nexaai/tts_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
+ nexaai/tts_impl/mlx_tts_impl.py,sha256=LcH9bVdIl3Q6lOzSUB_X2s-_nWFmlCl1yL7XSUK0fYI,3195
66
+ nexaai/tts_impl/pybind_tts_impl.py,sha256=n3z4zmPQayQJgAwcvETw0IBUCp8IYROuYFSg0tAy_8Y,1487
67
+ nexaai/utils/decode.py,sha256=0Z9jDH4ICzw4YXj8nD4L-sMouDaev-TISGRQ4KzidWE,421
68
+ nexaai/utils/manifest_utils.py,sha256=BoKqnI6N5CkEPTDZCRWSx7wga6aH8h6cr4nbff7gVwg,22020
69
+ nexaai/utils/model_manager.py,sha256=IN5t7MV0guHfKKkbGYnw4bDDk088F9lgmtNFiqEhGN8,67674
70
+ nexaai/utils/model_types.py,sha256=q2m7diYLOpLvRl1ixL2eMq5_kdTj8KqPBGWX4p6Ob08,1532
71
+ nexaai/utils/progress_tracker.py,sha256=BztrFqtjwNUmeREwZ5m7H6ZcrVzQEbpZfsxndWh4z0A,15778
72
+ nexaai/utils/quantization_utils.py,sha256=FxnZ6-uAE_bl_vQ5jsRXlpU0NBn-U4Y8iN9_O6aCdPA,8070
73
+ nexaai/vlm_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
+ nexaai/vlm_impl/mlx_vlm_impl.py,sha256=gI09QJcok68QG-36csXr3c2yPCZXTE0dlq1MUBEo_Ms,11091
75
+ nexaai/vlm_impl/pybind_vlm_impl.py,sha256=w8gAZNW2lk3mCKolg4iKgD58RhHCEk4v9aYI1RwVGqc,10021
76
+ nexaai-1.0.21.dist-info/METADATA,sha256=QDe6JKuYoDbb8frPConGluKRownepYjjvqE5G10ixiw,1215
77
+ nexaai-1.0.21.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
78
+ nexaai-1.0.21.dist-info/top_level.txt,sha256=LRE2YERlrZk2vfuygnSzsEeqSknnZbz3Z1MHyNmBU4w,7
79
+ nexaai-1.0.21.dist-info/RECORD,,
@@ -1,76 +0,0 @@
1
- nexaai/__init__.py,sha256=mbzzeXrEHHI_E3BQ0_OukD9wNajKJJVk0ykxT0rz8uM,2267
2
- nexaai/_stub.cp310-win_amd64.pyd,sha256=Efpmsr8o9_ipQ75vdg7mSVW9cDblaJR8WTv-Vbw0z5g,10752
3
- nexaai/_version.py,sha256=YQby4GMX_eKc_N1oaIy8c7_k8XB5jYqAA-LTQGOHYpk,143
4
- nexaai/asr.py,sha256=_fsGaxpiU137bUtO5ujtFSYCI1RLsyeEm3Gf4GhHVRk,2118
5
- nexaai/base.py,sha256=qQBCiQVNzgpkQjZX9aiFDEdbAAe56TROKC3WnWra2Zg,1021
6
- nexaai/common.py,sha256=muQqFY-WllwL5IO83tImexbuUcoEQsKg73u4gWL2lNs,3548
7
- nexaai/cv.py,sha256=a6-csgYNDzPziJ0EojE9-BeM_xCny4UvWWbpnJ7GL-A,3365
8
- nexaai/embedder.py,sha256=3a81s7JapvYxCRbWPFKp_9EWBKW7WYqF03gk87YuGKU,2524
9
- nexaai/image_gen.py,sha256=4iASOKxJosMznLarTvOxJQDNaas251O81bfUWJTUBfE,4496
10
- nexaai/llm.py,sha256=Qwm1q_NStLfD-JYZQIvxniWnAmwNl1V6LUON3Me7w_I,3663
11
- nexaai/log.py,sha256=F_Qe169kLbnFV25WJmS_ZtmBfOdcGic8BYFIsYVoD_o,2720
12
- nexaai/rerank.py,sha256=_zGWmX6eDigY2kViMKCtNssp4JMEeVycZZfJH9eAZOY,1927
13
- nexaai/runtime.py,sha256=_BoAtTUv5ZR7wtOlJL5TldR3AZTP0OnMWjB9p71k-8E,2135
14
- nexaai/tts.py,sha256=afs6sx0w0Tvs_aJlyZRPm62qQpTrs-fW_jDHrMkc4AA,2241
15
- nexaai/vlm.py,sha256=wUMbRURluxvULbS7vgyHsWdEPgLGrrC_S79bhdEN7Vg,4860
16
- nexaai/asr_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
- nexaai/asr_impl/mlx_asr_impl.py,sha256=XwMX3LYMeulp8cDS0TCCYcjvttFHAyDWQ_oMvABwQmI,3349
18
- nexaai/asr_impl/pybind_asr_impl.py,sha256=20o5SOPzhF9x41ra8L_qIM7YxCkYeLb5csSrNde-dds,1560
19
- nexaai/binds/__init__.py,sha256=ENl-uoIF9-3XGIXitVgZ2QmJ6p7Yet4h1-X7nUDZ0Hk,108
20
- nexaai/binds/common_bind.cp310-win_amd64.pyd,sha256=oiNbKJtiPnP4aIOkKMxR4Vl3O-6gNWUOtiAqx3aG8AA,205824
21
- nexaai/binds/embedder_bind.cp310-win_amd64.pyd,sha256=TpTTLaLmFVFa8BiTE5zX-6FZ9IZKoq9MUBqyimJpA7A,182784
22
- nexaai/binds/libcrypto-3-x64.dll,sha256=X7hDuQPMn6eRe58dTGJxTmRPKFWgd5i6Gjoy9QPLmPg,7315968
23
- nexaai/binds/libssl-3-x64.dll,sha256=GRw0cOaGUaR2QHRvBFuU_9S9iNgkyVgm0NIpZMnReAw,1313792
24
- nexaai/binds/llm_bind.cp310-win_amd64.pyd,sha256=Kh4F7bqWvVQA9eZkEwTSTpQRuznOhVYeELhOsGMQyzo,162816
25
- nexaai/binds/nexa_bridge.dll,sha256=F71KwL9PeUz9e1eDt5rSLP1nee5hc8_ekfpMYh2sJ0k,187904
26
- nexaai/binds/vlm_bind.cp310-win_amd64.pyd,sha256=FyyI4GrYnVCMUIXfzdkxNERlgMMGjA4qSSlmFhJYDBA,168960
27
- nexaai/binds/cpu_gpu/ggml-base.dll,sha256=Ws7NWfpdEn_QTL8gnh_sUz_J0K179Yl241uM4P0JGVw,532480
28
- nexaai/binds/cpu_gpu/ggml-cpu.dll,sha256=RanyT0m4REZJYz04ixpbhd87lemnUrzhCNXtdsDqbLY,672768
29
- nexaai/binds/cpu_gpu/ggml-cuda.dll,sha256=ex7fxyZe2KPcxkgfxSBrjf2oIgf7jbE1Rt74ywKyAls,313528832
30
- nexaai/binds/cpu_gpu/ggml-vulkan.dll,sha256=wGkKnEdCLKw0vWLH51GRuuzR8Lum9ta6Xh1Lge1zeFg,36627968
31
- nexaai/binds/cpu_gpu/ggml.dll,sha256=XBQajP9P05YqqzJ-0sADsb0luzbwWomxdI5nwpsnzqw,66560
32
- nexaai/binds/cpu_gpu/mtmd.dll,sha256=Z5r0VXuuFYZqwQBAutN2P378mF9zFFayxYRTa8BjeQk,561152
33
- nexaai/binds/cpu_gpu/nexa_cpu_gpu.dll,sha256=36jvlF5lKsOiQZuAY-QdXRNm1vQwZY5xFjX5MHUt7eI,1611776
34
- nexaai/binds/cpu_gpu/nexa_plugin.dll,sha256=Bv65TVCcZZ_CVjjMbbnwV4Jb5wZ0ILONDn0w95YABwQ,1411072
35
- nexaai/binds/nexaml/ggml-base.dll,sha256=Ws7NWfpdEn_QTL8gnh_sUz_J0K179Yl241uM4P0JGVw,532480
36
- nexaai/binds/nexaml/ggml-cpu.dll,sha256=RanyT0m4REZJYz04ixpbhd87lemnUrzhCNXtdsDqbLY,672768
37
- nexaai/binds/nexaml/ggml-cuda.dll,sha256=ex7fxyZe2KPcxkgfxSBrjf2oIgf7jbE1Rt74ywKyAls,313528832
38
- nexaai/binds/nexaml/ggml-vulkan.dll,sha256=wGkKnEdCLKw0vWLH51GRuuzR8Lum9ta6Xh1Lge1zeFg,36627968
39
- nexaai/binds/nexaml/ggml.dll,sha256=XBQajP9P05YqqzJ-0sADsb0luzbwWomxdI5nwpsnzqw,66560
40
- nexaai/binds/nexaml/nexa-mm-process.dll,sha256=DDD5qPbelZAIrRWGggOd3Pg9U_fh_ZEYIplwqiyD5LY,4643328
41
- nexaai/binds/nexaml/nexa-sampling.dll,sha256=Notkz287laSUG2_ED3oFXWVLJM3t7x_USkvX6wKVOLA,4265984
42
- nexaai/binds/nexaml/nexa_plugin.dll,sha256=6nvov9eZ7Y5eJVFzCzrmaGesweplmSOv_2L6s6wsXEU,601600
43
- nexaai/binds/nexaml/nexaproc.dll,sha256=cVU4ngSdsQ0MttqOv5IUZhmUE8lZLq-OjC8ueaAsx1s,2668544
44
- nexaai/binds/nexaml/qwen3-vl.dll,sha256=say_RLwLsIq_svPlgqPl12gfrOCQtcCiwa_q91Ql7YM,5873152
45
- nexaai/binds/nexaml/qwen3vl-vision.dll,sha256=5AX4MtAOWTcXSAkS2qqvl2pFti4HR55dtkCaOO03Evc,1063424
46
- nexaai/cv_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
- nexaai/cv_impl/mlx_cv_impl.py,sha256=QLd_8w90gtxH8kmssaDYatCTRvQNIJuUGKZNnYrmx6E,3317
48
- nexaai/cv_impl/pybind_cv_impl.py,sha256=aSOCAxmHrwJbEkSN6VX3Cykqlj_9RIpVrZXILul04GA,1096
49
- nexaai/embedder_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- nexaai/embedder_impl/mlx_embedder_impl.py,sha256=Kzd-veLNl95FbI2oEJMtr6qKbjtPDDajzsGUVjJfTRA,4598
51
- nexaai/embedder_impl/pybind_embedder_impl.py,sha256=eH2L--L6BAl-46UOzm84pfjIkJtQKVd63-r62eb0Vg0,3670
52
- nexaai/image_gen_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
- nexaai/image_gen_impl/mlx_image_gen_impl.py,sha256=peUE9ue9ApaPlZVOICBWiHtd13sY40OWQbE8EjfIUMU,11511
54
- nexaai/image_gen_impl/pybind_image_gen_impl.py,sha256=514RFQMSO0Rhacq0IYzlEhEr6QfaprnGew0Rjz8HZI4,3777
55
- nexaai/llm_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
- nexaai/llm_impl/mlx_llm_impl.py,sha256=r9Qa1ZuduRAcRjmqo2J_zlqhprVPe3ioZtUbi7yIvYY,11426
57
- nexaai/llm_impl/pybind_llm_impl.py,sha256=s2Cb035xDbh1ZhGNys0LRtAR6b6n4-YVKSC5voD4_Tk,8269
58
- nexaai/rerank_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
- nexaai/rerank_impl/mlx_rerank_impl.py,sha256=x8L6zCccV2I4bq4V5zAOcrWFe5Ckle7z5J_00tao8bI,3335
60
- nexaai/rerank_impl/pybind_rerank_impl.py,sha256=1IW925bYv4FRwZDNzf9epEzdDqR6T3OONgTLBd-cOn8,1556
61
- nexaai/tts_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
- nexaai/tts_impl/mlx_tts_impl.py,sha256=LcH9bVdIl3Q6lOzSUB_X2s-_nWFmlCl1yL7XSUK0fYI,3195
63
- nexaai/tts_impl/pybind_tts_impl.py,sha256=n3z4zmPQayQJgAwcvETw0IBUCp8IYROuYFSg0tAy_8Y,1487
64
- nexaai/utils/decode.py,sha256=0Z9jDH4ICzw4YXj8nD4L-sMouDaev-TISGRQ4KzidWE,421
65
- nexaai/utils/manifest_utils.py,sha256=E07t_bNq-EDrqVYZW7uyX8zsKsFklvqqwSvic0in0tQ,21800
66
- nexaai/utils/model_manager.py,sha256=qzlGP4sZLYsO72vg-EUCVA0RUknVKtLYMmDDfPmG45g,60999
67
- nexaai/utils/model_types.py,sha256=q2m7diYLOpLvRl1ixL2eMq5_kdTj8KqPBGWX4p6Ob08,1532
68
- nexaai/utils/progress_tracker.py,sha256=BztrFqtjwNUmeREwZ5m7H6ZcrVzQEbpZfsxndWh4z0A,15778
69
- nexaai/utils/quantization_utils.py,sha256=FxnZ6-uAE_bl_vQ5jsRXlpU0NBn-U4Y8iN9_O6aCdPA,8070
70
- nexaai/vlm_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
- nexaai/vlm_impl/mlx_vlm_impl.py,sha256=MgqJO7OzuPd79gOZZKhSXXMNSP2eBuhhrdCX8XHn6aQ,11090
72
- nexaai/vlm_impl/pybind_vlm_impl.py,sha256=NuQ_Ep1TnjmGAkjJuUS0Lb6z7iPu3wroLVOx7kiAwlE,8827
73
- nexaai-1.0.20.dist-info/METADATA,sha256=K2V5GVx_4VMBYf-ki7CpTOKuWrpxhc4lSGYpY5zl_rs,1238
74
- nexaai-1.0.20.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
75
- nexaai-1.0.20.dist-info/top_level.txt,sha256=LRE2YERlrZk2vfuygnSzsEeqSknnZbz3Z1MHyNmBU4w,7
76
- nexaai-1.0.20.dist-info/RECORD,,