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.
- 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/common.py +42 -7
- nexaai/embedder_impl/mlx_embedder_impl.py +6 -5
- nexaai/llm.py +5 -1
- nexaai/llm_impl/mlx_llm_impl.py +7 -0
- nexaai/llm_impl/pybind_llm_impl.py +10 -1
- nexaai/utils/model_manager.py +0 -8
- nexaai/utils/progress_tracker.py +10 -6
- nexaai/vlm.py +5 -1
- nexaai/vlm_impl/mlx_vlm_impl.py +7 -0
- nexaai/vlm_impl/pybind_vlm_impl.py +10 -1
- {nexaai-1.0.4rc16.dist-info → nexaai-1.0.6.dist-info}/METADATA +14 -9
- {nexaai-1.0.4rc16.dist-info → nexaai-1.0.6.dist-info}/RECORD +28 -28
- {nexaai-1.0.4rc16.dist-info → nexaai-1.0.6.dist-info}/WHEEL +0 -0
- {nexaai-1.0.4rc16.dist-info → nexaai-1.0.6.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
|
nexaai/common.py
CHANGED
|
@@ -59,10 +59,45 @@ class ModelConfig:
|
|
|
59
59
|
|
|
60
60
|
@dataclass(frozen=True) # Read-only
|
|
61
61
|
class ProfilingData:
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
|
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
|
-
#
|
|
31
|
-
|
|
32
|
-
# Create instance and load MLX embedder
|
|
30
|
+
# Create instance
|
|
33
31
|
instance = cls()
|
|
34
|
-
|
|
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
|
"""
|
nexaai/llm_impl/mlx_llm_impl.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from typing import Generator, Optional, Any, Sequence, Union
|
|
2
2
|
|
|
3
|
+
from nexaai.base import ProfilingData
|
|
3
4
|
from nexaai.common import ModelConfig, GenerationConfig, ChatMessage, PluginID
|
|
4
5
|
from nexaai.llm import LLM
|
|
5
6
|
from nexaai.mlx_backend.llm.interface import LLM as MLXLLMInterface
|
|
@@ -215,6 +216,12 @@ class MLXLLMImpl(LLM):
|
|
|
215
216
|
except Exception as e:
|
|
216
217
|
raise RuntimeError(f"Failed to generate text: {str(e)}")
|
|
217
218
|
|
|
219
|
+
def get_profiling_data(self) -> Optional[ProfilingData]:
|
|
220
|
+
"""Get profiling data from the last generation."""
|
|
221
|
+
if not self._mlx_llm:
|
|
222
|
+
raise RuntimeError("MLX LLM not loaded")
|
|
223
|
+
return self._mlx_llm.get_profiling_data()
|
|
224
|
+
|
|
218
225
|
def save_kv_cache(self, path: str):
|
|
219
226
|
"""
|
|
220
227
|
Save the key-value cache to the file.
|
|
@@ -2,6 +2,7 @@ from typing import Generator, Optional, Union
|
|
|
2
2
|
import queue
|
|
3
3
|
import threading
|
|
4
4
|
|
|
5
|
+
from nexaai.base import ProfilingData
|
|
5
6
|
from nexaai.common import ModelConfig, GenerationConfig, ChatMessage, PluginID
|
|
6
7
|
from nexaai.binds import llm_bind, common_bind
|
|
7
8
|
from nexaai.runtime import _ensure_runtime
|
|
@@ -13,6 +14,7 @@ class PyBindLLMImpl(LLM):
|
|
|
13
14
|
"""Private constructor, should not be called directly."""
|
|
14
15
|
super().__init__(m_cfg)
|
|
15
16
|
self._handle = handle # This is a py::capsule
|
|
17
|
+
self._profiling_data = None
|
|
16
18
|
|
|
17
19
|
@classmethod
|
|
18
20
|
def _load_from(cls,
|
|
@@ -97,13 +99,14 @@ class PyBindLLMImpl(LLM):
|
|
|
97
99
|
# Run generation in thread
|
|
98
100
|
def generate():
|
|
99
101
|
try:
|
|
100
|
-
llm_bind.ml_llm_generate(
|
|
102
|
+
result = llm_bind.ml_llm_generate(
|
|
101
103
|
handle=self._handle,
|
|
102
104
|
prompt=prompt,
|
|
103
105
|
config=config,
|
|
104
106
|
on_token=on_token,
|
|
105
107
|
user_data=None
|
|
106
108
|
)
|
|
109
|
+
self._profiling_data = ProfilingData.from_dict(result.get("profile_data", {}))
|
|
107
110
|
except Exception as e:
|
|
108
111
|
exception_container[0] = e
|
|
109
112
|
finally:
|
|
@@ -145,8 +148,14 @@ class PyBindLLMImpl(LLM):
|
|
|
145
148
|
on_token=None, # No callback for non-streaming
|
|
146
149
|
user_data=None
|
|
147
150
|
)
|
|
151
|
+
|
|
152
|
+
self._profiling_data = ProfilingData.from_dict(result.get("profile_data", {}))
|
|
148
153
|
return result.get("text", "")
|
|
149
154
|
|
|
155
|
+
def get_profiling_data(self) -> Optional[ProfilingData]:
|
|
156
|
+
"""Get profiling data."""
|
|
157
|
+
return self._profiling_data
|
|
158
|
+
|
|
150
159
|
def save_kv_cache(self, path: str):
|
|
151
160
|
"""
|
|
152
161
|
Save the key-value cache to the file.
|
nexaai/utils/model_manager.py
CHANGED
|
@@ -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,
|
nexaai/utils/progress_tracker.py
CHANGED
|
@@ -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.
|
|
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
|
nexaai/vlm_impl/mlx_vlm_impl.py
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
21
|
-
Requires-Dist: mlx
|
|
22
|
-
Requires-Dist:
|
|
23
|
-
Requires-Dist:
|
|
24
|
-
Requires-Dist:
|
|
25
|
-
Requires-Dist:
|
|
26
|
-
Requires-Dist:
|
|
27
|
-
Requires-Dist:
|
|
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=
|
|
3
|
-
nexaai/_version.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
20
|
-
nexaai/binds/embedder_bind.cp310-win_amd64.pyd,sha256=
|
|
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=
|
|
24
|
-
nexaai/binds/nexa_bridge.dll,sha256=
|
|
25
|
-
nexaai/binds/nexa_llama_cpp/ggml-base.dll,sha256=
|
|
26
|
-
nexaai/binds/nexa_llama_cpp/ggml-cpu.dll,sha256=
|
|
27
|
-
nexaai/binds/nexa_llama_cpp/ggml-cuda.dll,sha256=
|
|
28
|
-
nexaai/binds/nexa_llama_cpp/ggml-vulkan.dll,sha256=
|
|
29
|
-
nexaai/binds/nexa_llama_cpp/ggml.dll,sha256=
|
|
30
|
-
nexaai/binds/nexa_llama_cpp/llama.dll,sha256=
|
|
31
|
-
nexaai/binds/nexa_llama_cpp/mtmd.dll,sha256=
|
|
32
|
-
nexaai/binds/nexa_llama_cpp/nexa_plugin.dll,sha256=
|
|
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=
|
|
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=
|
|
44
|
-
nexaai/llm_impl/pybind_llm_impl.py,sha256=
|
|
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=
|
|
54
|
-
nexaai/utils/progress_tracker.py,sha256=
|
|
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=
|
|
57
|
-
nexaai/vlm_impl/pybind_vlm_impl.py,sha256=
|
|
58
|
-
nexaai-1.0.
|
|
59
|
-
nexaai-1.0.
|
|
60
|
-
nexaai-1.0.
|
|
61
|
-
nexaai-1.0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|