nexaai 1.0.17rc4__cp310-cp310-win_amd64.whl → 1.0.17rc6__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.
- nexaai/_stub.cp310-win_amd64.pyd +0 -0
- nexaai/_version.py +1 -1
- nexaai/binds/common_bind.cp310-win_amd64.pyd +0 -0
- nexaai/binds/embedder_bind.cp310-win_amd64.pyd +0 -0
- nexaai/binds/llm_bind.cp310-win_amd64.pyd +0 -0
- nexaai/binds/nexa_bridge.dll +0 -0
- nexaai/binds/nexa_llama_cpp/ggml-base.dll +0 -0
- nexaai/binds/nexa_llama_cpp/ggml-cpu.dll +0 -0
- nexaai/binds/nexa_llama_cpp/ggml-cuda.dll +0 -0
- nexaai/binds/nexa_llama_cpp/ggml-vulkan.dll +0 -0
- nexaai/binds/nexa_llama_cpp/ggml.dll +0 -0
- nexaai/binds/nexa_llama_cpp/llama.dll +0 -0
- nexaai/binds/nexa_llama_cpp/mtmd.dll +0 -0
- nexaai/binds/nexa_llama_cpp/nexa_plugin.dll +0 -0
- nexaai/binds/nexa_nexaml/ggml-base.dll +0 -0
- nexaai/binds/nexa_nexaml/ggml-cpu.dll +0 -0
- nexaai/binds/nexa_nexaml/ggml-cuda.dll +0 -0
- nexaai/binds/nexa_nexaml/ggml-vulkan.dll +0 -0
- nexaai/binds/nexa_nexaml/ggml.dll +0 -0
- nexaai/binds/nexa_nexaml/nexa_plugin.dll +0 -0
- nexaai/binds/vlm_bind.cp310-win_amd64.pyd +0 -0
- nexaai/utils/manifest_utils.py +10 -14
- nexaai/utils/model_manager.py +28 -26
- {nexaai-1.0.17rc4.dist-info → nexaai-1.0.17rc6.dist-info}/METADATA +1 -1
- {nexaai-1.0.17rc4.dist-info → nexaai-1.0.17rc6.dist-info}/RECORD +27 -28
- nexaai/utils/avatar_fetcher.py +0 -104
- {nexaai-1.0.17rc4.dist-info → nexaai-1.0.17rc6.dist-info}/WHEEL +0 -0
- {nexaai-1.0.17rc4.dist-info → nexaai-1.0.17rc6.dist-info}/top_level.txt +0 -0
nexaai/_stub.cp310-win_amd64.pyd
CHANGED
|
Binary file
|
nexaai/_version.py
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
nexaai/binds/nexa_bridge.dll
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
nexaai/utils/manifest_utils.py
CHANGED
|
@@ -35,15 +35,8 @@ def process_manifest_metadata(manifest: Dict[str, Any], repo_id: str) -> Dict[st
|
|
|
35
35
|
# Handle download_time - keep as null if missing
|
|
36
36
|
download_time = manifest.get('download_time')
|
|
37
37
|
|
|
38
|
-
# Handle avatar_url -
|
|
38
|
+
# Handle avatar_url - leave it null if missing/null
|
|
39
39
|
avatar_url = manifest.get('avatar_url')
|
|
40
|
-
if not avatar_url:
|
|
41
|
-
try:
|
|
42
|
-
from .avatar_fetcher import get_avatar_url_for_repo
|
|
43
|
-
avatar_url = get_avatar_url_for_repo(repo_id)
|
|
44
|
-
except Exception:
|
|
45
|
-
# If fetching fails, leave as None
|
|
46
|
-
avatar_url = None
|
|
47
40
|
|
|
48
41
|
# Return processed metadata
|
|
49
42
|
processed_manifest = manifest.copy()
|
|
@@ -171,9 +164,9 @@ def create_gguf_manifest(repo_id: str, files: List[str], directory_path: str, ol
|
|
|
171
164
|
},
|
|
172
165
|
"ExtraFiles": None,
|
|
173
166
|
# Preserve old metadata fields
|
|
174
|
-
"pipeline_tag": old_metadata.get('pipeline_tag'),
|
|
175
|
-
"download_time": old_metadata.get('download_time'),
|
|
176
|
-
"avatar_url": old_metadata.get('avatar_url')
|
|
167
|
+
"pipeline_tag": old_metadata.get('pipeline_tag') if old_metadata.get('pipeline_tag') else existing_manifest.get('pipeline_tag'),
|
|
168
|
+
"download_time": old_metadata.get('download_time') if old_metadata.get('download_time') else existing_manifest.get('download_time'),
|
|
169
|
+
"avatar_url": old_metadata.get('avatar_url') if old_metadata.get('avatar_url') else existing_manifest.get('avatar_url')
|
|
177
170
|
}
|
|
178
171
|
|
|
179
172
|
return manifest
|
|
@@ -182,6 +175,9 @@ def create_gguf_manifest(repo_id: str, files: List[str], directory_path: str, ol
|
|
|
182
175
|
def create_mlx_manifest(repo_id: str, files: List[str], directory_path: str, old_metadata: Dict[str, Any], is_mmproj: bool = False, file_name: Optional[Union[str, List[str]]] = None) -> Dict[str, Any]:
|
|
183
176
|
"""Create MLX format manifest."""
|
|
184
177
|
|
|
178
|
+
# Load existing manifest to merge MLX files if it exists
|
|
179
|
+
existing_manifest = load_nexa_manifest(directory_path)
|
|
180
|
+
|
|
185
181
|
model_files = {}
|
|
186
182
|
extra_files = []
|
|
187
183
|
|
|
@@ -250,9 +246,9 @@ def create_mlx_manifest(repo_id: str, files: List[str], directory_path: str, old
|
|
|
250
246
|
},
|
|
251
247
|
"ExtraFiles": extra_files if extra_files else None,
|
|
252
248
|
# Preserve old metadata fields
|
|
253
|
-
"pipeline_tag": old_metadata.get('pipeline_tag'),
|
|
254
|
-
"download_time": old_metadata.get('download_time'),
|
|
255
|
-
"avatar_url": old_metadata.get('avatar_url')
|
|
249
|
+
"pipeline_tag": old_metadata.get('pipeline_tag') if old_metadata.get('pipeline_tag') else existing_manifest.get('pipeline_tag'),
|
|
250
|
+
"download_time": old_metadata.get('download_time') if old_metadata.get('download_time') else existing_manifest.get('download_time'),
|
|
251
|
+
"avatar_url": old_metadata.get('avatar_url') if old_metadata.get('avatar_url') else existing_manifest.get('avatar_url')
|
|
256
252
|
}
|
|
257
253
|
|
|
258
254
|
return manifest
|
nexaai/utils/model_manager.py
CHANGED
|
@@ -11,7 +11,6 @@ from huggingface_hub import HfApi
|
|
|
11
11
|
from huggingface_hub.utils import HfHubHTTPError, RepositoryNotFoundError
|
|
12
12
|
|
|
13
13
|
from .progress_tracker import CustomProgressTqdm, DownloadProgressTracker
|
|
14
|
-
from .avatar_fetcher import get_avatar_url_for_repo
|
|
15
14
|
from .manifest_utils import (
|
|
16
15
|
load_download_metadata,
|
|
17
16
|
save_download_metadata,
|
|
@@ -790,7 +789,7 @@ class HuggingFaceDownloader:
|
|
|
790
789
|
# If no expected size, just check that file is not empty
|
|
791
790
|
return os.path.getsize(file_path) > 0
|
|
792
791
|
|
|
793
|
-
def _fetch_and_save_metadata(self, repo_id: str, local_dir: str, is_mmproj: bool = False, file_name: Optional[Union[str, List[str]]] = None) -> None:
|
|
792
|
+
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:
|
|
794
793
|
"""Fetch model info and save metadata after successful download."""
|
|
795
794
|
# Initialize metadata with defaults to ensure manifest is always created
|
|
796
795
|
old_metadata = {
|
|
@@ -809,14 +808,9 @@ class HuggingFaceDownloader:
|
|
|
809
808
|
# Log the error but continue with manifest creation
|
|
810
809
|
print(f"Warning: Could not fetch model info for {repo_id}: {e}")
|
|
811
810
|
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
if avatar_url:
|
|
816
|
-
old_metadata['avatar_url'] = avatar_url
|
|
817
|
-
except Exception as e:
|
|
818
|
-
# Log the error but continue with manifest creation
|
|
819
|
-
print(f"Warning: Could not fetch avatar URL for {repo_id}: {e}")
|
|
811
|
+
# Use input avater url if provided
|
|
812
|
+
old_metadata['avatar_url'] = kwargs.get('avatar_url')
|
|
813
|
+
|
|
820
814
|
|
|
821
815
|
# CRITICAL: Always create the manifest file, regardless of metadata fetch failures
|
|
822
816
|
try:
|
|
@@ -850,7 +844,8 @@ class HuggingFaceDownloader:
|
|
|
850
844
|
file_name: str,
|
|
851
845
|
local_dir: str,
|
|
852
846
|
progress_tracker: Optional[DownloadProgressTracker],
|
|
853
|
-
force_download: bool = False
|
|
847
|
+
force_download: bool = False,
|
|
848
|
+
**kwargs
|
|
854
849
|
) -> str:
|
|
855
850
|
"""Download a single file from the repository using HuggingFace Hub API."""
|
|
856
851
|
# Create repo-specific directory for the single file
|
|
@@ -882,7 +877,7 @@ class HuggingFaceDownloader:
|
|
|
882
877
|
progress_tracker.stop_tracking()
|
|
883
878
|
|
|
884
879
|
# Save metadata after successful download
|
|
885
|
-
self._fetch_and_save_metadata(repo_id, file_local_dir, self._current_is_mmproj, self._current_file_name)
|
|
880
|
+
self._fetch_and_save_metadata(repo_id, file_local_dir, self._current_is_mmproj, self._current_file_name, **kwargs)
|
|
886
881
|
|
|
887
882
|
return downloaded_path
|
|
888
883
|
|
|
@@ -901,7 +896,8 @@ class HuggingFaceDownloader:
|
|
|
901
896
|
repo_id: str,
|
|
902
897
|
local_dir: str,
|
|
903
898
|
progress_tracker: Optional[DownloadProgressTracker],
|
|
904
|
-
force_download: bool = False
|
|
899
|
+
force_download: bool = False,
|
|
900
|
+
**kwargs
|
|
905
901
|
) -> str:
|
|
906
902
|
"""Download the entire repository."""
|
|
907
903
|
# Create a subdirectory for this specific repo
|
|
@@ -927,7 +923,7 @@ class HuggingFaceDownloader:
|
|
|
927
923
|
progress_tracker.stop_tracking()
|
|
928
924
|
|
|
929
925
|
# Save metadata after successful download
|
|
930
|
-
self._fetch_and_save_metadata(repo_id, repo_local_dir, self._current_is_mmproj, self._current_file_name)
|
|
926
|
+
self._fetch_and_save_metadata(repo_id, repo_local_dir, self._current_is_mmproj, self._current_file_name, **kwargs)
|
|
931
927
|
|
|
932
928
|
return downloaded_path
|
|
933
929
|
|
|
@@ -944,7 +940,8 @@ class HuggingFaceDownloader:
|
|
|
944
940
|
file_names: List[str],
|
|
945
941
|
local_dir: str,
|
|
946
942
|
progress_tracker: Optional[DownloadProgressTracker],
|
|
947
|
-
force_download: bool = False
|
|
943
|
+
force_download: bool = False,
|
|
944
|
+
**kwargs
|
|
948
945
|
) -> str:
|
|
949
946
|
"""Download multiple specific files from HuggingFace Hub."""
|
|
950
947
|
# Create repo-specific directory
|
|
@@ -989,7 +986,7 @@ class HuggingFaceDownloader:
|
|
|
989
986
|
progress_tracker.stop_tracking()
|
|
990
987
|
|
|
991
988
|
# Save metadata after successful download
|
|
992
|
-
self._fetch_and_save_metadata(repo_id, repo_local_dir, self._current_is_mmproj, self._current_file_name)
|
|
989
|
+
self._fetch_and_save_metadata(repo_id, repo_local_dir, self._current_is_mmproj, self._current_file_name, **kwargs)
|
|
993
990
|
|
|
994
991
|
return repo_local_dir
|
|
995
992
|
|
|
@@ -1015,7 +1012,8 @@ class HuggingFaceDownloader:
|
|
|
1015
1012
|
progress_callback: Optional[Callable[[Dict[str, Any]], None]] = None,
|
|
1016
1013
|
show_progress: bool = True,
|
|
1017
1014
|
force_download: bool = False,
|
|
1018
|
-
is_mmproj: bool = False
|
|
1015
|
+
is_mmproj: bool = False,
|
|
1016
|
+
**kwargs
|
|
1019
1017
|
) -> str:
|
|
1020
1018
|
"""
|
|
1021
1019
|
Main download method that handles all download scenarios.
|
|
@@ -1062,13 +1060,13 @@ class HuggingFaceDownloader:
|
|
|
1062
1060
|
if file_name is None:
|
|
1063
1061
|
# Download entire repository
|
|
1064
1062
|
return self._download_entire_repository(
|
|
1065
|
-
repo_id, local_dir, progress_tracker, force_download
|
|
1063
|
+
repo_id, local_dir, progress_tracker, force_download, **kwargs
|
|
1066
1064
|
)
|
|
1067
1065
|
elif isinstance(file_name, str):
|
|
1068
1066
|
# Download specific single file
|
|
1069
1067
|
self._validate_file_exists_in_repo(file_name, info, repo_id, progress_tracker)
|
|
1070
1068
|
return self._download_single_file(
|
|
1071
|
-
repo_id, file_name, local_dir, progress_tracker, force_download
|
|
1069
|
+
repo_id, file_name, local_dir, progress_tracker, force_download, **kwargs
|
|
1072
1070
|
)
|
|
1073
1071
|
else: # file_name is a list
|
|
1074
1072
|
# Download multiple specific files
|
|
@@ -1077,7 +1075,7 @@ class HuggingFaceDownloader:
|
|
|
1077
1075
|
self._validate_file_exists_in_repo(fname, info, repo_id, progress_tracker)
|
|
1078
1076
|
|
|
1079
1077
|
return self._download_multiple_files_from_hf(
|
|
1080
|
-
repo_id, file_name, local_dir, progress_tracker, force_download
|
|
1078
|
+
repo_id, file_name, local_dir, progress_tracker, force_download, **kwargs
|
|
1081
1079
|
)
|
|
1082
1080
|
|
|
1083
1081
|
except Exception as e:
|
|
@@ -1107,7 +1105,8 @@ def download_from_huggingface(
|
|
|
1107
1105
|
token: Union[bool, str, None] = None,
|
|
1108
1106
|
custom_endpoint: Optional[str] = None,
|
|
1109
1107
|
force_download: bool = False,
|
|
1110
|
-
is_mmproj: Optional[bool] = None
|
|
1108
|
+
is_mmproj: Optional[bool] = None,
|
|
1109
|
+
**kwargs
|
|
1111
1110
|
) -> str:
|
|
1112
1111
|
"""
|
|
1113
1112
|
Download models or files from HuggingFace Hub or custom mirror endpoints.
|
|
@@ -1197,7 +1196,8 @@ def download_from_huggingface(
|
|
|
1197
1196
|
progress_callback=progress_callback,
|
|
1198
1197
|
show_progress=show_progress,
|
|
1199
1198
|
force_download=force_download,
|
|
1200
|
-
is_mmproj=is_mmproj
|
|
1199
|
+
is_mmproj=is_mmproj,
|
|
1200
|
+
**kwargs
|
|
1201
1201
|
)
|
|
1202
1202
|
|
|
1203
1203
|
|
|
@@ -1211,7 +1211,8 @@ def _download_model_if_needed(
|
|
|
1211
1211
|
param_name: str,
|
|
1212
1212
|
progress_callback: Optional[Callable[[Dict[str, Any]], None]] = None,
|
|
1213
1213
|
token: Union[bool, str, None] = None,
|
|
1214
|
-
is_mmproj: bool = False
|
|
1214
|
+
is_mmproj: bool = False,
|
|
1215
|
+
**kwargs
|
|
1215
1216
|
) -> str:
|
|
1216
1217
|
"""
|
|
1217
1218
|
Helper function to download a model from HuggingFace if it doesn't exist locally.
|
|
@@ -1247,7 +1248,8 @@ def _download_model_if_needed(
|
|
|
1247
1248
|
progress_callback=progress_callback,
|
|
1248
1249
|
show_progress=True,
|
|
1249
1250
|
token=token,
|
|
1250
|
-
is_mmproj=is_mmproj
|
|
1251
|
+
is_mmproj=is_mmproj,
|
|
1252
|
+
**kwargs
|
|
1251
1253
|
)
|
|
1252
1254
|
|
|
1253
1255
|
return downloaded_path
|
|
@@ -1320,7 +1322,7 @@ def auto_download_model(func: Callable) -> Callable:
|
|
|
1320
1322
|
if name_or_path is not None:
|
|
1321
1323
|
try:
|
|
1322
1324
|
downloaded_name_path = _download_model_if_needed(
|
|
1323
|
-
name_or_path, 'name_or_path', progress_callback, token
|
|
1325
|
+
name_or_path, 'name_or_path', progress_callback, token, **kwargs
|
|
1324
1326
|
)
|
|
1325
1327
|
|
|
1326
1328
|
# Replace name_or_path with downloaded path
|
|
@@ -1338,7 +1340,7 @@ def auto_download_model(func: Callable) -> Callable:
|
|
|
1338
1340
|
if mmproj_path is not None:
|
|
1339
1341
|
try:
|
|
1340
1342
|
downloaded_mmproj_path = _download_model_if_needed(
|
|
1341
|
-
mmproj_path, 'mmproj_path', progress_callback, token, is_mmproj=True
|
|
1343
|
+
mmproj_path, 'mmproj_path', progress_callback, token, is_mmproj=True, **kwargs
|
|
1342
1344
|
)
|
|
1343
1345
|
|
|
1344
1346
|
# Replace mmproj_path with downloaded path
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
nexaai/__init__.py,sha256=mbzzeXrEHHI_E3BQ0_OukD9wNajKJJVk0ykxT0rz8uM,2267
|
|
2
|
-
nexaai/_stub.cp310-win_amd64.pyd,sha256=
|
|
3
|
-
nexaai/_version.py,sha256=
|
|
2
|
+
nexaai/_stub.cp310-win_amd64.pyd,sha256=oTs8w18u97m9hVEYxcr0hJzX8xhXH6E1EgEAYhn0WwU,10752
|
|
3
|
+
nexaai/_version.py,sha256=0ZuRl-kfhiNtwV_aBU4Bece34voIsesZ10rDaGoyLhU,147
|
|
4
4
|
nexaai/asr.py,sha256=_fsGaxpiU137bUtO5ujtFSYCI1RLsyeEm3Gf4GhHVRk,2118
|
|
5
5
|
nexaai/base.py,sha256=qQBCiQVNzgpkQjZX9aiFDEdbAAe56TROKC3WnWra2Zg,1021
|
|
6
6
|
nexaai/common.py,sha256=muQqFY-WllwL5IO83tImexbuUcoEQsKg73u4gWL2lNs,3548
|
|
@@ -17,29 +17,29 @@ nexaai/asr_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
17
17
|
nexaai/asr_impl/mlx_asr_impl.py,sha256=XwMX3LYMeulp8cDS0TCCYcjvttFHAyDWQ_oMvABwQmI,3349
|
|
18
18
|
nexaai/asr_impl/pybind_asr_impl.py,sha256=20o5SOPzhF9x41ra8L_qIM7YxCkYeLb5csSrNde-dds,1560
|
|
19
19
|
nexaai/binds/__init__.py,sha256=ENl-uoIF9-3XGIXitVgZ2QmJ6p7Yet4h1-X7nUDZ0Hk,108
|
|
20
|
-
nexaai/binds/common_bind.cp310-win_amd64.pyd,sha256=
|
|
21
|
-
nexaai/binds/embedder_bind.cp310-win_amd64.pyd,sha256=
|
|
20
|
+
nexaai/binds/common_bind.cp310-win_amd64.pyd,sha256=Q1BhHyzilfRRsXuoBD7pN1dtm6VGXku4Q133hLC-LlU,205824
|
|
21
|
+
nexaai/binds/embedder_bind.cp310-win_amd64.pyd,sha256=xYDozXpDuvp54QPFWTcz8YcDaThjP697ox6mUKLmOy0,182784
|
|
22
22
|
nexaai/binds/libcrypto-3-x64.dll,sha256=TAWcTdJrWviUingNyWaraOfz0ILUy7ybpI4VaiVHURg,7315968
|
|
23
23
|
nexaai/binds/libssl-3-x64.dll,sha256=ZxawOWlONNM0Neg47w4JbU8kZJldj046H1zV3LiETa0,1313792
|
|
24
|
-
nexaai/binds/llm_bind.cp310-win_amd64.pyd,sha256=
|
|
25
|
-
nexaai/binds/nexa_bridge.dll,sha256=
|
|
26
|
-
nexaai/binds/vlm_bind.cp310-win_amd64.pyd,sha256=
|
|
27
|
-
nexaai/binds/nexa_llama_cpp/ggml-base.dll,sha256=
|
|
28
|
-
nexaai/binds/nexa_llama_cpp/ggml-cpu.dll,sha256=
|
|
29
|
-
nexaai/binds/nexa_llama_cpp/ggml-cuda.dll,sha256=
|
|
30
|
-
nexaai/binds/nexa_llama_cpp/ggml-vulkan.dll,sha256=
|
|
31
|
-
nexaai/binds/nexa_llama_cpp/ggml.dll,sha256=
|
|
32
|
-
nexaai/binds/nexa_llama_cpp/llama.dll,sha256=
|
|
33
|
-
nexaai/binds/nexa_llama_cpp/mtmd.dll,sha256=
|
|
34
|
-
nexaai/binds/nexa_llama_cpp/nexa_plugin.dll,sha256=
|
|
35
|
-
nexaai/binds/nexa_nexaml/ggml-base.dll,sha256=
|
|
36
|
-
nexaai/binds/nexa_nexaml/ggml-cpu.dll,sha256=
|
|
37
|
-
nexaai/binds/nexa_nexaml/ggml-cuda.dll,sha256=
|
|
38
|
-
nexaai/binds/nexa_nexaml/ggml-vulkan.dll,sha256=
|
|
39
|
-
nexaai/binds/nexa_nexaml/ggml.dll,sha256=
|
|
24
|
+
nexaai/binds/llm_bind.cp310-win_amd64.pyd,sha256=LJtUKePsf6aCeFWe8mNT_8F4qdF47iLjtnh_fN7Wnxs,162816
|
|
25
|
+
nexaai/binds/nexa_bridge.dll,sha256=8VKruEstzY6SJArTazvU204Sqjg0juKgPUhYCYF4jiw,171008
|
|
26
|
+
nexaai/binds/vlm_bind.cp310-win_amd64.pyd,sha256=ucRXpKhZyBLriM4ef1VW8WHIBPsyTOcAi0RUoCneQRc,168960
|
|
27
|
+
nexaai/binds/nexa_llama_cpp/ggml-base.dll,sha256=4vJCkQbHq__s5tTFCcKJxxL1tQTaEEDv6HynnUyMkzI,532480
|
|
28
|
+
nexaai/binds/nexa_llama_cpp/ggml-cpu.dll,sha256=E_Y--19NPzp9XzvMiSNj6_4AFQoO8VX3O_JTZQ9mULU,672768
|
|
29
|
+
nexaai/binds/nexa_llama_cpp/ggml-cuda.dll,sha256=lISNt-_dtYWIUIiqVrnxYREqpfNqVYVxOInzXFldu9I,313528832
|
|
30
|
+
nexaai/binds/nexa_llama_cpp/ggml-vulkan.dll,sha256=sPLmpIPEcZESdqMWwpiFF43vNtGy03bGlGQXzTrXKV0,36627456
|
|
31
|
+
nexaai/binds/nexa_llama_cpp/ggml.dll,sha256=4L8A2v49A0-xrazUhw2J0R01oMo8jgjrwBHrxO0-gsc,66560
|
|
32
|
+
nexaai/binds/nexa_llama_cpp/llama.dll,sha256=2pYy177Kvg_ZLyQRFZZgTIzjlpZizA_j_kxKfxlvZRk,1611776
|
|
33
|
+
nexaai/binds/nexa_llama_cpp/mtmd.dll,sha256=dSuvEYtCrelo1g0jV4eRg0u57ZUcx9unhPBiPV8L10E,561152
|
|
34
|
+
nexaai/binds/nexa_llama_cpp/nexa_plugin.dll,sha256=hEBZdCtzzLpIZlIIPiGhO_DY44_4e8xKxhNnCZ6PZA8,1413120
|
|
35
|
+
nexaai/binds/nexa_nexaml/ggml-base.dll,sha256=4vJCkQbHq__s5tTFCcKJxxL1tQTaEEDv6HynnUyMkzI,532480
|
|
36
|
+
nexaai/binds/nexa_nexaml/ggml-cpu.dll,sha256=E_Y--19NPzp9XzvMiSNj6_4AFQoO8VX3O_JTZQ9mULU,672768
|
|
37
|
+
nexaai/binds/nexa_nexaml/ggml-cuda.dll,sha256=lISNt-_dtYWIUIiqVrnxYREqpfNqVYVxOInzXFldu9I,313528832
|
|
38
|
+
nexaai/binds/nexa_nexaml/ggml-vulkan.dll,sha256=sPLmpIPEcZESdqMWwpiFF43vNtGy03bGlGQXzTrXKV0,36627456
|
|
39
|
+
nexaai/binds/nexa_nexaml/ggml.dll,sha256=4L8A2v49A0-xrazUhw2J0R01oMo8jgjrwBHrxO0-gsc,66560
|
|
40
40
|
nexaai/binds/nexa_nexaml/nexa-mm-process.dll,sha256=oDnqTaAUeZrWJePQEDuIYKEOMP-ndu221mMFHht4bSY,4642816
|
|
41
41
|
nexaai/binds/nexa_nexaml/nexa-sampling.dll,sha256=PNtidsRbGO8dTfbf7-VMdhQRbF328yvLnmDjMy2Tb7Y,4265984
|
|
42
|
-
nexaai/binds/nexa_nexaml/nexa_plugin.dll,sha256=
|
|
42
|
+
nexaai/binds/nexa_nexaml/nexa_plugin.dll,sha256=Oic5O_NrtsVoO_NwKyQDh_yLDc5--JRYdXXBQx8AlzI,602112
|
|
43
43
|
nexaai/binds/nexa_nexaml/nexaproc.dll,sha256=9X4TF6p7wOiIXi_SA7uHLoEmrvcTlH2WpfijK7HxZgY,2668544
|
|
44
44
|
nexaai/binds/nexa_nexaml/qwen3-vl.dll,sha256=Es-etUDiMmK_BwOki8V79Nja-NY4kBbrkhtnesXfMMU,5870592
|
|
45
45
|
nexaai/binds/nexa_nexaml/qwen3vl-vision.dll,sha256=HFAk0FxWlf_lko3AQL6uBXTIhm6AzDFi5PjxI0lxONI,1184256
|
|
@@ -61,17 +61,16 @@ nexaai/rerank_impl/pybind_rerank_impl.py,sha256=1IW925bYv4FRwZDNzf9epEzdDqR6T3OO
|
|
|
61
61
|
nexaai/tts_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
62
|
nexaai/tts_impl/mlx_tts_impl.py,sha256=LcH9bVdIl3Q6lOzSUB_X2s-_nWFmlCl1yL7XSUK0fYI,3195
|
|
63
63
|
nexaai/tts_impl/pybind_tts_impl.py,sha256=n3z4zmPQayQJgAwcvETw0IBUCp8IYROuYFSg0tAy_8Y,1487
|
|
64
|
-
nexaai/utils/avatar_fetcher.py,sha256=D01f8je-37Nd68zGw8MYK2m7y3fvGlC6h0KR-aN9kdU,3925
|
|
65
64
|
nexaai/utils/decode.py,sha256=0Z9jDH4ICzw4YXj8nD4L-sMouDaev-TISGRQ4KzidWE,421
|
|
66
|
-
nexaai/utils/manifest_utils.py,sha256=
|
|
67
|
-
nexaai/utils/model_manager.py,sha256=
|
|
65
|
+
nexaai/utils/manifest_utils.py,sha256=OyLi9e4JrOBunswf4FG2KoVvkbv2FulkOf5LqRDVf50,12979
|
|
66
|
+
nexaai/utils/model_manager.py,sha256=bWMVvcBu5dC3YmWtsJK4C3IaXfaDSByAYcH7GVLtoEg,57334
|
|
68
67
|
nexaai/utils/model_types.py,sha256=arIyb9q-1uG0nyUGdWZaxxDJAxv0cfnJEpjCzyELL5Q,1416
|
|
69
68
|
nexaai/utils/progress_tracker.py,sha256=BztrFqtjwNUmeREwZ5m7H6ZcrVzQEbpZfsxndWh4z0A,15778
|
|
70
69
|
nexaai/utils/quantization_utils.py,sha256=FxnZ6-uAE_bl_vQ5jsRXlpU0NBn-U4Y8iN9_O6aCdPA,8070
|
|
71
70
|
nexaai/vlm_impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
71
|
nexaai/vlm_impl/mlx_vlm_impl.py,sha256=MgqJO7OzuPd79gOZZKhSXXMNSP2eBuhhrdCX8XHn6aQ,11090
|
|
73
72
|
nexaai/vlm_impl/pybind_vlm_impl.py,sha256=NuQ_Ep1TnjmGAkjJuUS0Lb6z7iPu3wroLVOx7kiAwlE,8827
|
|
74
|
-
nexaai-1.0.
|
|
75
|
-
nexaai-1.0.
|
|
76
|
-
nexaai-1.0.
|
|
77
|
-
nexaai-1.0.
|
|
73
|
+
nexaai-1.0.17rc6.dist-info/METADATA,sha256=9OQOKa68hwxN-v-QCooWoa3XXveuWupaT4DnJQpWaQE,1233
|
|
74
|
+
nexaai-1.0.17rc6.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
|
|
75
|
+
nexaai-1.0.17rc6.dist-info/top_level.txt,sha256=LRE2YERlrZk2vfuygnSzsEeqSknnZbz3Z1MHyNmBU4w,7
|
|
76
|
+
nexaai-1.0.17rc6.dist-info/RECORD,,
|
nexaai/utils/avatar_fetcher.py
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
"""Utility for fetching avatar URLs from HuggingFace."""
|
|
2
|
-
|
|
3
|
-
import logging
|
|
4
|
-
from typing import Dict, Optional
|
|
5
|
-
import httpx
|
|
6
|
-
|
|
7
|
-
logger = logging.getLogger(__name__)
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def fetch_avatar_urls_from_hf_api(query: str, custom_endpoint: Optional[str] = None) -> Dict[str, str]:
|
|
11
|
-
"""
|
|
12
|
-
Fetch avatar URLs from HuggingFace models-json endpoint.
|
|
13
|
-
|
|
14
|
-
Args:
|
|
15
|
-
query: Search query to fetch models for
|
|
16
|
-
custom_endpoint: Optional custom HuggingFace endpoint
|
|
17
|
-
|
|
18
|
-
Returns:
|
|
19
|
-
Dictionary mapping author names to avatar URLs
|
|
20
|
-
"""
|
|
21
|
-
avatar_map = {}
|
|
22
|
-
try:
|
|
23
|
-
# Use the base URL from the configured endpoint
|
|
24
|
-
base_url = custom_endpoint if custom_endpoint else "https://huggingface.co"
|
|
25
|
-
|
|
26
|
-
# Build the URL with query parameter
|
|
27
|
-
url = f"{base_url}/models-json?sort=trending&search={query}&withCount=true"
|
|
28
|
-
|
|
29
|
-
# Make the HTTP request with a timeout
|
|
30
|
-
with httpx.Client(timeout=2.0) as client:
|
|
31
|
-
response = client.get(url)
|
|
32
|
-
|
|
33
|
-
if response.status_code == 200:
|
|
34
|
-
data = response.json()
|
|
35
|
-
models = data.get("models", [])
|
|
36
|
-
|
|
37
|
-
# Build a map of author names to avatar URLs
|
|
38
|
-
for model in models:
|
|
39
|
-
author = model.get("author")
|
|
40
|
-
author_data = model.get("authorData", {})
|
|
41
|
-
avatar_url = author_data.get("avatarUrl")
|
|
42
|
-
|
|
43
|
-
if author and avatar_url:
|
|
44
|
-
# Handle relative URLs by prepending appropriate base URL
|
|
45
|
-
if avatar_url.startswith("/"):
|
|
46
|
-
avatar_url = f"{base_url}{avatar_url}"
|
|
47
|
-
avatar_map[author] = avatar_url
|
|
48
|
-
|
|
49
|
-
logger.debug(f"Fetched {len(avatar_map)} avatar URLs from HuggingFace API")
|
|
50
|
-
else:
|
|
51
|
-
logger.warning(f"Failed to fetch avatar URLs: HTTP {response.status_code}")
|
|
52
|
-
|
|
53
|
-
except Exception as e:
|
|
54
|
-
logger.warning(f"Error fetching avatar URLs from HuggingFace API: {e}")
|
|
55
|
-
# Return empty map on error - we'll fall back to default behavior
|
|
56
|
-
|
|
57
|
-
return avatar_map
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
def get_avatar_url_for_repo(repo_id: str, search_query: Optional[str] = None,
|
|
61
|
-
custom_endpoint: Optional[str] = None) -> Optional[str]:
|
|
62
|
-
"""
|
|
63
|
-
Get avatar URL for a repository ID.
|
|
64
|
-
|
|
65
|
-
This method tries multiple strategies:
|
|
66
|
-
1. If search_query is provided, fetch from HuggingFace API with that query
|
|
67
|
-
2. Try fetching with the full repo_id as query
|
|
68
|
-
3. Try fetching with just the organization name as query
|
|
69
|
-
4. Fall back to CDN URL pattern
|
|
70
|
-
|
|
71
|
-
Args:
|
|
72
|
-
repo_id: Repository ID in format "owner/repo"
|
|
73
|
-
search_query: Optional search query to use for fetching avatars
|
|
74
|
-
custom_endpoint: Optional custom HuggingFace endpoint
|
|
75
|
-
|
|
76
|
-
Returns:
|
|
77
|
-
Avatar URL or None if not found
|
|
78
|
-
"""
|
|
79
|
-
if "/" not in repo_id:
|
|
80
|
-
return None
|
|
81
|
-
|
|
82
|
-
org_name = repo_id.split("/")[0]
|
|
83
|
-
|
|
84
|
-
# Try with search query if provided
|
|
85
|
-
if search_query:
|
|
86
|
-
avatar_map = fetch_avatar_urls_from_hf_api(search_query, custom_endpoint)
|
|
87
|
-
avatar_url = avatar_map.get(org_name)
|
|
88
|
-
if avatar_url:
|
|
89
|
-
return avatar_url
|
|
90
|
-
|
|
91
|
-
# Try with full repo_id
|
|
92
|
-
avatar_map = fetch_avatar_urls_from_hf_api(repo_id, custom_endpoint)
|
|
93
|
-
avatar_url = avatar_map.get(org_name)
|
|
94
|
-
if avatar_url:
|
|
95
|
-
return avatar_url
|
|
96
|
-
|
|
97
|
-
# Try with just organization name
|
|
98
|
-
avatar_map = fetch_avatar_urls_from_hf_api(org_name, custom_endpoint)
|
|
99
|
-
avatar_url = avatar_map.get(org_name)
|
|
100
|
-
if avatar_url:
|
|
101
|
-
return avatar_url
|
|
102
|
-
|
|
103
|
-
# Fallback to CDN URL pattern
|
|
104
|
-
return f"https://cdn-thumbnails.huggingface.co/social-thumbnails/{org_name}.png"
|
|
File without changes
|
|
File without changes
|