neuralnode 2.2.0__py3-none-any.whl → 2.2.2__py3-none-any.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.
- neuralnode/__init__.py +1 -1
- neuralnode/integrations/openclaw.py +2 -7
- neuralnode/integrations/whatsapp.py +3 -4
- neuralnode/providers/horus.py +179 -22
- {neuralnode-2.2.0.dist-info → neuralnode-2.2.2.dist-info}/METADATA +36 -13
- {neuralnode-2.2.0.dist-info → neuralnode-2.2.2.dist-info}/RECORD +8 -20
- neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/-en--bug-report.yaml +0 -107
- neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/-en--feature-request.yaml +0 -86
- neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/-pt--reportar-bug.yaml +0 -108
- neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/-pt--solicitar-recurso.yaml +0 -86
- neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/bug_report.yml +0 -81
- neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/feature_request.yml +0 -85
- neuralnode/integrations/whatsapp/evolution-api/.github/pull_request_template.md +0 -41
- neuralnode/integrations/whatsapp/evolution-api/.github/workflows/check_code_quality.yml +0 -42
- neuralnode/integrations/whatsapp/evolution-api/.github/workflows/publish_docker_image.yml +0 -50
- neuralnode/integrations/whatsapp/evolution-api/.github/workflows/publish_docker_image_homolog.yml +0 -50
- neuralnode/integrations/whatsapp/evolution-api/.github/workflows/publish_docker_image_latest.yml +0 -50
- neuralnode/integrations/whatsapp/evolution-api/.github/workflows/security.yml +0 -55
- {neuralnode-2.2.0.dist-info → neuralnode-2.2.2.dist-info}/WHEEL +0 -0
- {neuralnode-2.2.0.dist-info → neuralnode-2.2.2.dist-info}/licenses/LICENSE +0 -0
neuralnode/__init__.py
CHANGED
|
@@ -365,13 +365,10 @@ class OpenClawManager:
|
|
|
365
365
|
# We check if pnpm or npm is available
|
|
366
366
|
use_pnpm = subprocess.run(["pnpm", "--version"], capture_output=True).returncode == 0
|
|
367
367
|
pm_cmd = ["pnpm", "install"] if use_pnpm else ["npm", "install"]
|
|
368
|
-
pm_cmd_str = " ".join(pm_cmd)
|
|
369
|
-
|
|
370
368
|
subprocess.run(
|
|
371
|
-
|
|
369
|
+
pm_cmd,
|
|
372
370
|
cwd=str(repo_dir),
|
|
373
371
|
check=True,
|
|
374
|
-
shell=True,
|
|
375
372
|
capture_output=True
|
|
376
373
|
)
|
|
377
374
|
except subprocess.CalledProcessError as e:
|
|
@@ -439,11 +436,9 @@ class OpenClawManager:
|
|
|
439
436
|
startup_cmd = ["pnpm", "run", "dev"] if use_pnpm else ["npm", "run", "dev"]
|
|
440
437
|
|
|
441
438
|
logger.info(f"Starting OpenClaw Gateway via: {' '.join(startup_cmd)}")
|
|
442
|
-
startup_cmd_str = " ".join(startup_cmd) if isinstance(startup_cmd, list) else startup_cmd
|
|
443
439
|
self.process = subprocess.Popen(
|
|
444
|
-
|
|
440
|
+
startup_cmd,
|
|
445
441
|
cwd=str(repo_dir),
|
|
446
|
-
shell=True,
|
|
447
442
|
stdout=subprocess.PIPE,
|
|
448
443
|
stderr=subprocess.PIPE,
|
|
449
444
|
text=True
|
|
@@ -231,8 +231,7 @@ DATABASE_ENABLED=false
|
|
|
231
231
|
self.logger.info("Installing gateway dependencies (npm install)...")
|
|
232
232
|
# Run npm install
|
|
233
233
|
subprocess.run(
|
|
234
|
-
"npm install",
|
|
235
|
-
shell=True,
|
|
234
|
+
["npm", "install"],
|
|
236
235
|
cwd=str(gateway_dir),
|
|
237
236
|
stdout=subprocess.DEVNULL,
|
|
238
237
|
stderr=subprocess.DEVNULL
|
|
@@ -240,9 +239,9 @@ DATABASE_ENABLED=false
|
|
|
240
239
|
|
|
241
240
|
self.logger.info("Starting NeuralNode WhatsApp Gateway...")
|
|
242
241
|
# Start server
|
|
242
|
+
startup_cmd = ["npm", "run", "dev"] if (gateway_dir / "src").exists() else ["npm", "start"]
|
|
243
243
|
self.gateway_process = subprocess.Popen(
|
|
244
|
-
|
|
245
|
-
shell=True,
|
|
244
|
+
startup_cmd,
|
|
246
245
|
cwd=str(gateway_dir),
|
|
247
246
|
stdout=subprocess.DEVNULL,
|
|
248
247
|
stderr=subprocess.DEVNULL
|
neuralnode/providers/horus.py
CHANGED
|
@@ -172,7 +172,7 @@ class HorusProvider(BaseLLMProvider):
|
|
|
172
172
|
|
|
173
173
|
provider_name = "horus"
|
|
174
174
|
provider_type = ProviderType.LOCAL
|
|
175
|
-
default_model = "
|
|
175
|
+
default_model = "horus"
|
|
176
176
|
|
|
177
177
|
HORUS_MODELS: Dict[str, Dict[str, Any]] = {
|
|
178
178
|
"tokenaii/horus": {
|
|
@@ -271,6 +271,114 @@ class HorusProvider(BaseLLMProvider):
|
|
|
271
271
|
"quantization": "Q8_0",
|
|
272
272
|
"file_size": "7.9 GB",
|
|
273
273
|
},
|
|
274
|
+
"tokenaii/Horus-Hiero-9B": {
|
|
275
|
+
"name": "Horus-Hiero-9B",
|
|
276
|
+
"official_name": "Horus-Hiero-9B",
|
|
277
|
+
"size": "9B",
|
|
278
|
+
"type": "safetensors",
|
|
279
|
+
"repo_id": "tokenaii/Horus-Hiero-9B",
|
|
280
|
+
"task": "image-text-to-text",
|
|
281
|
+
"context_window": 262144,
|
|
282
|
+
},
|
|
283
|
+
"tokenaii/Horus-Hiero-9B-GGUF/Horus-Hiero-9B-FP16.gguf": {
|
|
284
|
+
"name": "Horus-Hiero-9B-FP16.gguf",
|
|
285
|
+
"official_name": "Horus-Hiero-9B-FP16.gguf",
|
|
286
|
+
"size": "9B",
|
|
287
|
+
"type": "gguf",
|
|
288
|
+
"quantization": "FP16",
|
|
289
|
+
"file_size": "17.9 GB",
|
|
290
|
+
"context_window": 262144,
|
|
291
|
+
},
|
|
292
|
+
"tokenaii/Horus-Hiero-9B-GGUF/Horus-Hiero-9B-Q2_K.gguf": {
|
|
293
|
+
"name": "Horus-Hiero-9B-Q2_K.gguf",
|
|
294
|
+
"official_name": "Horus-Hiero-9B-Q2_K.gguf",
|
|
295
|
+
"size": "9B",
|
|
296
|
+
"type": "gguf",
|
|
297
|
+
"quantization": "Q2_K",
|
|
298
|
+
"file_size": "3.83 GB",
|
|
299
|
+
"context_window": 262144,
|
|
300
|
+
},
|
|
301
|
+
"tokenaii/Horus-Hiero-9B-GGUF/Horus-Hiero-9B-Q4_K_M.gguf": {
|
|
302
|
+
"name": "Horus-Hiero-9B-Q4_K_M.gguf",
|
|
303
|
+
"official_name": "Horus-Hiero-9B-Q4_K_M.gguf",
|
|
304
|
+
"size": "9B",
|
|
305
|
+
"type": "gguf",
|
|
306
|
+
"quantization": "Q4_K_M",
|
|
307
|
+
"file_size": "5.63 GB",
|
|
308
|
+
"context_window": 262144,
|
|
309
|
+
},
|
|
310
|
+
"tokenaii/Horus-Hiero-9B-GGUF/Horus-Hiero-9B-Q6_K.gguf": {
|
|
311
|
+
"name": "Horus-Hiero-9B-Q6_K.gguf",
|
|
312
|
+
"official_name": "Horus-Hiero-9B-Q6_K.gguf",
|
|
313
|
+
"size": "9B",
|
|
314
|
+
"type": "gguf",
|
|
315
|
+
"quantization": "Q6_K",
|
|
316
|
+
"file_size": "7.36 GB",
|
|
317
|
+
"context_window": 262144,
|
|
318
|
+
},
|
|
319
|
+
"tokenaii/Horus-Hiero-9B-GGUF/Horus-Hiero-9B-Q8_0.gguf": {
|
|
320
|
+
"name": "Horus-Hiero-9B-Q8_0.gguf",
|
|
321
|
+
"official_name": "Horus-Hiero-9B-Q8_0.gguf",
|
|
322
|
+
"size": "9B",
|
|
323
|
+
"type": "gguf",
|
|
324
|
+
"quantization": "Q8_0",
|
|
325
|
+
"file_size": "9.53 GB",
|
|
326
|
+
"context_window": 262144,
|
|
327
|
+
},
|
|
328
|
+
"tokenaii/Horus-Hiero-Mini-4B": {
|
|
329
|
+
"name": "Horus-Hiero-Mini-4B",
|
|
330
|
+
"official_name": "Horus-Hiero-Mini-4B",
|
|
331
|
+
"size": "4B",
|
|
332
|
+
"type": "safetensors",
|
|
333
|
+
"repo_id": "tokenaii/Horus-Hiero-Mini-4B",
|
|
334
|
+
"task": "image-text-to-text",
|
|
335
|
+
"context_window": 262144,
|
|
336
|
+
},
|
|
337
|
+
"tokenaii/Horus-Hiero-Mini-4B-GGUF/Horus-Hiero-Mini-4B-FP16.gguf": {
|
|
338
|
+
"name": "Horus-Hiero-Mini-4B-FP16.gguf",
|
|
339
|
+
"official_name": "Horus-Hiero-Mini-4B-FP16.gguf",
|
|
340
|
+
"size": "4B",
|
|
341
|
+
"type": "gguf",
|
|
342
|
+
"quantization": "FP16",
|
|
343
|
+
"file_size": "8.42 GB",
|
|
344
|
+
"context_window": 262144,
|
|
345
|
+
},
|
|
346
|
+
"tokenaii/Horus-Hiero-Mini-4B-GGUF/Horus-Hiero-Mini-4B-Q2_K.gguf": {
|
|
347
|
+
"name": "Horus-Hiero-Mini-4B-Q2_K.gguf",
|
|
348
|
+
"official_name": "Horus-Hiero-Mini-4B-Q2_K.gguf",
|
|
349
|
+
"size": "4B",
|
|
350
|
+
"type": "gguf",
|
|
351
|
+
"quantization": "Q2_K",
|
|
352
|
+
"file_size": "1.92 GB",
|
|
353
|
+
"context_window": 262144,
|
|
354
|
+
},
|
|
355
|
+
"tokenaii/Horus-Hiero-Mini-4B-GGUF/Horus-Hiero-Mini-4B-Q4_K_M.gguf": {
|
|
356
|
+
"name": "Horus-Hiero-Mini-4B-Q4_K_M.gguf",
|
|
357
|
+
"official_name": "Horus-Hiero-Mini-4B-Q4_K_M.gguf",
|
|
358
|
+
"size": "4B",
|
|
359
|
+
"type": "gguf",
|
|
360
|
+
"quantization": "Q4_K_M",
|
|
361
|
+
"file_size": "2.71 GB",
|
|
362
|
+
"context_window": 262144,
|
|
363
|
+
},
|
|
364
|
+
"tokenaii/Horus-Hiero-Mini-4B-GGUF/Horus-Hiero-Mini-4B-Q6_K.gguf": {
|
|
365
|
+
"name": "Horus-Hiero-Mini-4B-Q6_K.gguf",
|
|
366
|
+
"official_name": "Horus-Hiero-Mini-4B-Q6_K.gguf",
|
|
367
|
+
"size": "4B",
|
|
368
|
+
"type": "gguf",
|
|
369
|
+
"quantization": "Q6_K",
|
|
370
|
+
"file_size": "3.46 GB",
|
|
371
|
+
"context_window": 262144,
|
|
372
|
+
},
|
|
373
|
+
"tokenaii/Horus-Hiero-Mini-4B-GGUF/Horus-Hiero-Mini-4B-Q8_0.gguf": {
|
|
374
|
+
"name": "Horus-Hiero-Mini-4B-Q8_0.gguf",
|
|
375
|
+
"official_name": "Horus-Hiero-Mini-4B-Q8_0.gguf",
|
|
376
|
+
"size": "4B",
|
|
377
|
+
"type": "gguf",
|
|
378
|
+
"quantization": "Q8_0",
|
|
379
|
+
"file_size": "4.48 GB",
|
|
380
|
+
"context_window": 262144,
|
|
381
|
+
},
|
|
274
382
|
}
|
|
275
383
|
|
|
276
384
|
CHAT_TEMPLATES = {
|
|
@@ -280,6 +388,40 @@ class HorusProvider(BaseLLMProvider):
|
|
|
280
388
|
UNIFIED_CHAT_TEMPLATE_NAME: UNIFIED_CHAT_TEMPLATE_NAME,
|
|
281
389
|
}
|
|
282
390
|
|
|
391
|
+
@classmethod
|
|
392
|
+
def _model_aliases(cls) -> Dict[str, str]:
|
|
393
|
+
aliases: Dict[str, str] = {
|
|
394
|
+
"horus": "tokenaii/horus",
|
|
395
|
+
"Horus-1.0-4B": "tokenaii/horus/Horus-1.0-4B",
|
|
396
|
+
}
|
|
397
|
+
for model_id, info in cls.HORUS_MODELS.items():
|
|
398
|
+
names = {
|
|
399
|
+
model_id,
|
|
400
|
+
str(info.get("name", "")),
|
|
401
|
+
str(info.get("official_name", "")),
|
|
402
|
+
model_id.split("/")[-1],
|
|
403
|
+
}
|
|
404
|
+
for name in names:
|
|
405
|
+
if name:
|
|
406
|
+
aliases.setdefault(name, model_id)
|
|
407
|
+
return aliases
|
|
408
|
+
|
|
409
|
+
@classmethod
|
|
410
|
+
def _resolve_model_id(cls, model_id: str) -> str:
|
|
411
|
+
aliases = cls._model_aliases()
|
|
412
|
+
for alias, canonical_id in aliases.items():
|
|
413
|
+
if alias.lower() == model_id.lower():
|
|
414
|
+
return canonical_id
|
|
415
|
+
return model_id
|
|
416
|
+
|
|
417
|
+
@classmethod
|
|
418
|
+
def _display_model_id(cls, model_id: str, info: Dict[str, Any]) -> str:
|
|
419
|
+
if model_id == "tokenaii/horus":
|
|
420
|
+
return "horus"
|
|
421
|
+
if model_id == "tokenaii/horus/Horus-1.0-4B":
|
|
422
|
+
return "Horus-1.0-4B"
|
|
423
|
+
return str(info.get("official_name") or info.get("name") or model_id.split("/")[-1])
|
|
424
|
+
|
|
283
425
|
@property
|
|
284
426
|
def capabilities(self) -> ProviderCapabilities:
|
|
285
427
|
return ProviderCapabilities(
|
|
@@ -287,15 +429,16 @@ class HorusProvider(BaseLLMProvider):
|
|
|
287
429
|
text_completion=True,
|
|
288
430
|
streaming=True,
|
|
289
431
|
embeddings=False,
|
|
290
|
-
context_window=
|
|
432
|
+
context_window=self._context_window(),
|
|
291
433
|
async_support=True,
|
|
292
434
|
)
|
|
293
435
|
|
|
294
436
|
def __init__(
|
|
295
437
|
self,
|
|
296
|
-
model_id: str = "
|
|
438
|
+
model_id: str = "horus",
|
|
297
439
|
device: Optional[str] = None,
|
|
298
440
|
n_gpu_layers: Optional[int] = None,
|
|
441
|
+
n_ctx: Optional[int] = None,
|
|
299
442
|
torch_dtype: Optional[Any] = None,
|
|
300
443
|
load_in_8bit: bool = False,
|
|
301
444
|
load_in_4bit: bool = False,
|
|
@@ -349,19 +492,12 @@ class HorusProvider(BaseLLMProvider):
|
|
|
349
492
|
model_id = str(forwarded_model)
|
|
350
493
|
|
|
351
494
|
# Support `filename` kwarg so users can write:
|
|
352
|
-
# HorusLensModel(model_id="
|
|
495
|
+
# HorusLensModel(model_id="Horus-Lens-1.0-GGUF", filename="Horus-Lens-1.0-Q3_K_M.gguf")
|
|
353
496
|
forwarded_filename = kwargs.pop("filename", None)
|
|
354
497
|
if forwarded_filename:
|
|
355
498
|
model_id = f"{model_id.rstrip('/')}/{forwarded_filename}"
|
|
356
499
|
|
|
357
|
-
|
|
358
|
-
matched_key = None
|
|
359
|
-
for k in self.HORUS_MODELS.keys():
|
|
360
|
-
if k.lower() == model_id.lower():
|
|
361
|
-
matched_key = k
|
|
362
|
-
break
|
|
363
|
-
if matched_key:
|
|
364
|
-
model_id = matched_key
|
|
500
|
+
model_id = self._resolve_model_id(model_id)
|
|
365
501
|
|
|
366
502
|
is_lens_model = self._is_text_to_image_model_id(model_id)
|
|
367
503
|
if (
|
|
@@ -383,6 +519,7 @@ class HorusProvider(BaseLLMProvider):
|
|
|
383
519
|
self.model_id = model_id
|
|
384
520
|
self.device = device or self._resolve_device()
|
|
385
521
|
self.n_gpu_layers = n_gpu_layers
|
|
522
|
+
self.n_ctx = n_ctx
|
|
386
523
|
self._user_specified_dtype = torch_dtype # track explicit user choice
|
|
387
524
|
self.torch_dtype = self._resolve_torch_dtype(torch_dtype)
|
|
388
525
|
self.load_in_8bit = load_in_8bit
|
|
@@ -581,7 +718,7 @@ class HorusProvider(BaseLLMProvider):
|
|
|
581
718
|
quant_match = re.search(r"-(Q\d(?:_[A-Z0-9]+)?|TQ\d(?:_[A-Z0-9]+)?|F16|BF16)\.gguf$", filename, flags=re.IGNORECASE)
|
|
582
719
|
if quant_match:
|
|
583
720
|
base["quantization"] = quant_match.group(1).upper()
|
|
584
|
-
base
|
|
721
|
+
base.setdefault("context_window", HORUS_CONTEXT_WINDOW)
|
|
585
722
|
base["chat_template"] = UNIFIED_CHAT_TEMPLATE_NAME
|
|
586
723
|
base["recommended_settings"] = {
|
|
587
724
|
"max_new_tokens": self.generation_config["max_new_tokens"],
|
|
@@ -595,6 +732,17 @@ class HorusProvider(BaseLLMProvider):
|
|
|
595
732
|
}
|
|
596
733
|
return base
|
|
597
734
|
|
|
735
|
+
def _context_window(self) -> int:
|
|
736
|
+
info = getattr(self, "_model_info", None) or self.HORUS_MODELS.get(self.model_id, {})
|
|
737
|
+
return int(info.get("context_window", HORUS_CONTEXT_WINDOW))
|
|
738
|
+
|
|
739
|
+
def _runtime_context_window(self) -> int:
|
|
740
|
+
if self.n_ctx is not None:
|
|
741
|
+
return max(int(self.n_ctx), 1)
|
|
742
|
+
if self._is_gguf_model_id(self.model_id):
|
|
743
|
+
return min(self._context_window(), HORUS_CONTEXT_WINDOW)
|
|
744
|
+
return self._context_window()
|
|
745
|
+
|
|
598
746
|
def load(self) -> "HorusProvider":
|
|
599
747
|
self._configure_external_logging()
|
|
600
748
|
if self.model is not None:
|
|
@@ -1022,7 +1170,7 @@ class HorusProvider(BaseLLMProvider):
|
|
|
1022
1170
|
|
|
1023
1171
|
llama_kwargs: Dict[str, Any] = {
|
|
1024
1172
|
"model_path": model_path,
|
|
1025
|
-
"n_ctx":
|
|
1173
|
+
"n_ctx": self._runtime_context_window(),
|
|
1026
1174
|
"verbose": False,
|
|
1027
1175
|
"n_gpu_layers": self._resolve_n_gpu_layers(),
|
|
1028
1176
|
}
|
|
@@ -1382,7 +1530,7 @@ class HorusProvider(BaseLLMProvider):
|
|
|
1382
1530
|
|
|
1383
1531
|
settings = self._resolve_generation_settings(**kwargs)
|
|
1384
1532
|
max_new_tokens = int(settings.get("max_new_tokens", 512))
|
|
1385
|
-
max_input_tokens = max(
|
|
1533
|
+
max_input_tokens = max(self._context_window() - max_new_tokens, 1)
|
|
1386
1534
|
|
|
1387
1535
|
inputs = self.tokenizer(
|
|
1388
1536
|
prompt,
|
|
@@ -1738,7 +1886,7 @@ class HorusProvider(BaseLLMProvider):
|
|
|
1738
1886
|
|
|
1739
1887
|
settings = self._resolve_generation_settings(**kwargs)
|
|
1740
1888
|
max_new_tokens = int(settings.get("max_new_tokens", 512))
|
|
1741
|
-
max_input_tokens = max(
|
|
1889
|
+
max_input_tokens = max(self._context_window() - max_new_tokens, 1)
|
|
1742
1890
|
inputs = self.tokenizer(
|
|
1743
1891
|
prompt,
|
|
1744
1892
|
return_tensors="pt",
|
|
@@ -1851,7 +1999,8 @@ class HorusProvider(BaseLLMProvider):
|
|
|
1851
1999
|
"generation_config": dict(self.generation_config),
|
|
1852
2000
|
"flash_attention": self.use_flash_attention,
|
|
1853
2001
|
"attn_implementation": self.attn_implementation,
|
|
1854
|
-
"context_window":
|
|
2002
|
+
"context_window": self._context_window(),
|
|
2003
|
+
"runtime_context_window": self._runtime_context_window(),
|
|
1855
2004
|
"chat_template": UNIFIED_CHAT_TEMPLATE_NAME,
|
|
1856
2005
|
"tts_enabled": self.enable_tts,
|
|
1857
2006
|
"tts_voice_id": self.tts_voice_id,
|
|
@@ -2063,8 +2212,15 @@ class HorusProvider(BaseLLMProvider):
|
|
|
2063
2212
|
return results
|
|
2064
2213
|
|
|
2065
2214
|
@classmethod
|
|
2066
|
-
def list_available_models(cls) -> Dict[str, Dict[str, Any]]:
|
|
2067
|
-
return {
|
|
2215
|
+
def list_available_models(cls, canonical: bool = False) -> Dict[str, Dict[str, Any]]:
|
|
2216
|
+
return {
|
|
2217
|
+
(model_id if canonical else cls._display_model_id(model_id, info)): dict(
|
|
2218
|
+
info,
|
|
2219
|
+
model_id=model_id,
|
|
2220
|
+
context_window=info.get("context_window", HORUS_CONTEXT_WINDOW),
|
|
2221
|
+
)
|
|
2222
|
+
for model_id, info in cls.HORUS_MODELS.items()
|
|
2223
|
+
}
|
|
2068
2224
|
|
|
2069
2225
|
|
|
2070
2226
|
def print_model_list():
|
|
@@ -2092,12 +2248,13 @@ class HorusModel(HorusProvider):
|
|
|
2092
2248
|
class model:
|
|
2093
2249
|
@staticmethod
|
|
2094
2250
|
def List() -> List[Dict[str, str]]:
|
|
2095
|
-
"""Return available Horus models with
|
|
2251
|
+
"""Return available Horus models with simple NeuralNode model IDs."""
|
|
2096
2252
|
items: List[Dict[str, str]] = []
|
|
2097
2253
|
for model_id, info in HorusProvider.list_available_models().items():
|
|
2098
2254
|
items.append(
|
|
2099
2255
|
{
|
|
2100
2256
|
"model_id": model_id,
|
|
2257
|
+
"canonical_model_id": str(info.get("model_id", model_id)),
|
|
2101
2258
|
"official_name": str(info.get("official_name", HorusProvider._infer_official_name(model_id))),
|
|
2102
2259
|
"type": str(info.get("type", "unknown")),
|
|
2103
2260
|
}
|
|
@@ -2122,11 +2279,11 @@ Horus = HorusModel
|
|
|
2122
2279
|
HorusLensModel = HorusModel
|
|
2123
2280
|
|
|
2124
2281
|
|
|
2125
|
-
def load_horus(model_id: str = "
|
|
2282
|
+
def load_horus(model_id: str = "horus", **kwargs) -> HorusProvider:
|
|
2126
2283
|
return HorusProvider(model_id=model_id, **kwargs).load()
|
|
2127
2284
|
|
|
2128
2285
|
|
|
2129
|
-
def load_horus_lens(model_id: str = "
|
|
2286
|
+
def load_horus_lens(model_id: str = "Horus-Lens-1.0", **kwargs) -> HorusProvider:
|
|
2130
2287
|
return HorusProvider(model_id=model_id, **kwargs).load()
|
|
2131
2288
|
|
|
2132
2289
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: neuralnode
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.2
|
|
4
4
|
Summary: Comprehensive AI Framework with 50+ LLM Providers, Advanced Agents, Chains, Memory, RAG, and 100+ Tools
|
|
5
5
|
Project-URL: Homepage, https://assem.cloud/
|
|
6
6
|
Project-URL: Documentation, https://neuralnode.readthedocs.io
|
|
@@ -230,7 +230,7 @@ Horus downloads are public-only. Private or gated Hugging Face repositories are
|
|
|
230
230
|
import neuralnode as nn
|
|
231
231
|
|
|
232
232
|
model = nn.HorusModel(
|
|
233
|
-
model_id="
|
|
233
|
+
model_id="Horus-1.0-4B",
|
|
234
234
|
turboquant=True,
|
|
235
235
|
turboquant_bits=4,
|
|
236
236
|
).load()
|
|
@@ -252,21 +252,44 @@ print(HorusModel.list_available_models())
|
|
|
252
252
|
```
|
|
253
253
|
|
|
254
254
|
Supported IDs currently include:
|
|
255
|
-
- `
|
|
256
|
-
- `
|
|
257
|
-
- `
|
|
258
|
-
- `
|
|
259
|
-
- `
|
|
260
|
-
- `
|
|
261
|
-
- `
|
|
262
|
-
- `
|
|
255
|
+
- `horus`
|
|
256
|
+
- `Horus-1.0-4B`
|
|
257
|
+
- `Horus-1.0-4B-Q4_K_M.gguf`
|
|
258
|
+
- `Horus-1.0-4B-Q5_K_M.gguf`
|
|
259
|
+
- `Horus-1.0-4B-Q6_K.gguf`
|
|
260
|
+
- `Horus-1.0-4B-Q8_0.gguf`
|
|
261
|
+
- `Horus-1.0-4B-F16.gguf`
|
|
262
|
+
- `Horus-Lens-1.0`
|
|
263
|
+
- `Horus-Hiero-9B`
|
|
264
|
+
- `Horus-Hiero-9B-Q4_K_M.gguf`
|
|
265
|
+
- `Horus-Hiero-9B-Q6_K.gguf`
|
|
266
|
+
- `Horus-Hiero-Mini-4B`
|
|
267
|
+
- `Horus-Hiero-Mini-4B-Q4_K_M.gguf`
|
|
268
|
+
- `Horus-Hiero-Mini-4B-Q6_K.gguf`
|
|
269
|
+
|
|
270
|
+
### Horus Hiero
|
|
271
|
+
|
|
272
|
+
```python
|
|
273
|
+
import neuralnode as nn
|
|
274
|
+
|
|
275
|
+
model = nn.HorusModel(
|
|
276
|
+
"Horus-Hiero-Mini-4B-Q4_K_M.gguf",
|
|
277
|
+
device="cpu",
|
|
278
|
+
).load()
|
|
279
|
+
|
|
280
|
+
response = model.chat([
|
|
281
|
+
{"role": "user", "content": "Translate this hieroglyphic text into English."}
|
|
282
|
+
])
|
|
283
|
+
|
|
284
|
+
print(response.content)
|
|
285
|
+
```
|
|
263
286
|
|
|
264
287
|
### Horus Lens text-to-image
|
|
265
288
|
|
|
266
289
|
```python
|
|
267
290
|
import neuralnode as nn
|
|
268
291
|
|
|
269
|
-
model = nn.HorusLensModel("
|
|
292
|
+
model = nn.HorusLensModel("Horus-Lens-1.0").load()
|
|
270
293
|
model.generate_image(
|
|
271
294
|
"A detailed cinematic image of an ancient Egyptian AI lab, golden light",
|
|
272
295
|
output_path="outputs/horus_lens.png",
|
|
@@ -297,7 +320,7 @@ Voice mapping docs:
|
|
|
297
320
|
import neuralnode as nn
|
|
298
321
|
|
|
299
322
|
model = nn.HorusModel(
|
|
300
|
-
model_id="
|
|
323
|
+
model_id="Horus-1.0-4B",
|
|
301
324
|
enable_tts=True,
|
|
302
325
|
tts_voice_id="replic-salma-language{ar-eg}",
|
|
303
326
|
).load()
|
|
@@ -318,7 +341,7 @@ Use a BotFather token to connect an agent to Telegram.
|
|
|
318
341
|
```python
|
|
319
342
|
import neuralnode as nn
|
|
320
343
|
|
|
321
|
-
ai = nn.NeuralNode(provider="horus", model="
|
|
344
|
+
ai = nn.NeuralNode(provider="horus", model="Horus-1.0-4B")
|
|
322
345
|
agent = ai.agent(agent_type="simple", thinking=False)
|
|
323
346
|
|
|
324
347
|
bot = nn.TelegramBot(
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
neuralnode/__init__.py,sha256=
|
|
1
|
+
neuralnode/__init__.py,sha256=r1L6pRe7BQccux9Ib6b8Pp7OnpOlFHAV88lLG8xLnT0,25360
|
|
2
2
|
neuralnode/replica.py,sha256=QlvR3tfLt0Y7XSsUsB5wiKI_EO7oUFM-8XH0wsrrvls,7995
|
|
3
3
|
neuralnode/thinking.py,sha256=iBfCfBrLkD6AaHf2WaWfmzhFeV6zcXEZDjzLxmYt4VY,12614
|
|
4
4
|
neuralnode/turboquant.py,sha256=bRKsUbniJrtxvQ8mQqlSK-N6M2PltJJxd5H4lBW7kDc,18340
|
|
@@ -10,10 +10,10 @@ neuralnode/core/openai_blocker.py,sha256=NyMH5aXBF5toSfc_eObr3L7qHszWiOoCwDVrbOn
|
|
|
10
10
|
neuralnode/diagnostics/__init__.py,sha256=22U_NVNN3Y9FhheUXxwDLx1LGELxiN75ehHrH0t_QkM,25622
|
|
11
11
|
neuralnode/integrations/__init__.py,sha256=lB3CU5Inw5JQYiIMHzZgJtygxtsaQp_5_AefnU1lQh0,711
|
|
12
12
|
neuralnode/integrations/discord.py,sha256=_xneToa06BFcvvaXWjG4G3w6iRtCJ_dwtfFz7pjtBZA,6465
|
|
13
|
-
neuralnode/integrations/openclaw.py,sha256=
|
|
13
|
+
neuralnode/integrations/openclaw.py,sha256=AdEg9WW5Tz02zArunaovLnImFUxP_XXvA2_Wzg8EmRw,18284
|
|
14
14
|
neuralnode/integrations/slack.py,sha256=phgr4_fS2uMFkY7FeDOuzOagY2wQxhNDlqHK2KbtLGw,6259
|
|
15
15
|
neuralnode/integrations/telegram.py,sha256=re9Off7zT_Rxm7yR4FOYN3JrjYqth4UQJ3O5AIJXKMU,26632
|
|
16
|
-
neuralnode/integrations/whatsapp.py,sha256=
|
|
16
|
+
neuralnode/integrations/whatsapp.py,sha256=JaR-yAkkGtKJzO85YgwCG2aeKUWzehiIrg7CQQKIzcI,14507
|
|
17
17
|
neuralnode/integrations/whatsapp/evolution_rebrander.py,sha256=gJz17UKNdZgm17Rq9sYkWLEJyMraHjZPupeadoAudzQ,2167
|
|
18
18
|
neuralnode/integrations/whatsapp/evolution-api/.dockerignore,sha256=13PLq0nO_oGE6lbH3NL1xqLQe1TLFSnuDqlrdXKGZlo,62
|
|
19
19
|
neuralnode/integrations/whatsapp/evolution-api/.env.example,sha256=kK5glghFWjbbeZYc4Y7Md-BTFg7QdFkPDnTFrbqzQu0,13777
|
|
@@ -62,18 +62,6 @@ neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/s
|
|
|
62
62
|
neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/type-rules.mdc,sha256=Sp4I4NxU_sDdLNzHEUF_NMOWTNqYtoJs9NHwPGYB80I,11150
|
|
63
63
|
neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/util-rules.mdc,sha256=uXTT0azOx25coUC5w1nv0JwMDiaeLJkWfDl8Gu3o5LY,17126
|
|
64
64
|
neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/validate-rules.mdc,sha256=mrKoamtvu4rz--8yptwBFRg5jORKaXf3Tio35vmoPUw,15873
|
|
65
|
-
neuralnode/integrations/whatsapp/evolution-api/.github/pull_request_template.md,sha256=5vA360GCm4UU056irxtG9UVjC1w7yQ9iPfBv2eQkyEo,1644
|
|
66
|
-
neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/-en--bug-report.yaml,sha256=Pglj_CV96FqyIIgAQ1J7romcp8LRQZStCHrs8ez7RU0,3570
|
|
67
|
-
neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/-en--feature-request.yaml,sha256=p5QMlu3zb360BZZYtVdEVF8YWVukA0OJQDdgWGG8HFc,3035
|
|
68
|
-
neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/-pt--reportar-bug.yaml,sha256=3BZ_iF2473BKDuKDUd4l6HeXnpVDWiDCRX-Wcu4JOYk,3748
|
|
69
|
-
neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/-pt--solicitar-recurso.yaml,sha256=3sDOiwjxfmaWtSMZ_vXKJ7kazDF09qu5QNPXetLvoE8,3188
|
|
70
|
-
neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/bug_report.yml,sha256=w2kXcKC4fQkfis4tjKDPjrlEhonEF4Uzg3UW-nvC5nc,2341
|
|
71
|
-
neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/feature_request.yml,sha256=zUHCocYSJc1_EqbTtnyulcoXpKDnCZrOR0XJVElJ4zA,2641
|
|
72
|
-
neuralnode/integrations/whatsapp/evolution-api/.github/workflows/check_code_quality.yml,sha256=cox22TRMgHaE6lKmMi1xQhAhXGogmag4L3AgL-5k2RY,879
|
|
73
|
-
neuralnode/integrations/whatsapp/evolution-api/.github/workflows/publish_docker_image.yml,sha256=Ynws_GOGsa-a_VfCBQgF7_RvCcPu9-alHIiAEKANsPQ,1282
|
|
74
|
-
neuralnode/integrations/whatsapp/evolution-api/.github/workflows/publish_docker_image_homolog.yml,sha256=uwgLJ_m4ckNLFkZ5Z7uUoRtN6Z41KTTB5WtIPi77jqk,1248
|
|
75
|
-
neuralnode/integrations/whatsapp/evolution-api/.github/workflows/publish_docker_image_latest.yml,sha256=24-bOrMfm59b9BSYrJLH7FMMFGqE3BT80vwUFe2Bbxs,1244
|
|
76
|
-
neuralnode/integrations/whatsapp/evolution-api/.github/workflows/security.yml,sha256=hC_T9GdSarkOMorjQ6qGDO0amhLjuRhtzpGpEy-tIVI,1277
|
|
77
65
|
neuralnode/integrations/whatsapp/evolution-api/.husky/README.md,sha256=iA-JW89pEhleWbVaunmTnUf_etoj8JwAqghuINI_tjI,1200
|
|
78
66
|
neuralnode/integrations/whatsapp/evolution-api/.husky/commit-msg,sha256=cj9Yf-CwKS7n-9o1Puvoiiwu20oCY1wLWPtkU6fZ5uI,34
|
|
79
67
|
neuralnode/integrations/whatsapp/evolution-api/.husky/pre-commit,sha256=m4832I9o4Y1Pb8zRbIGZ43psa_We9wsxIM_hPwJcF78,17
|
|
@@ -384,7 +372,7 @@ neuralnode/prompts/__init__.py,sha256=GVCynrijvJ6zXWmg8knn7AkxGM0PFHwU7rEOUAdlJr
|
|
|
384
372
|
neuralnode/providers/__init__.py,sha256=e0bI1rFwIl-olmVKrZ5wyzpWl9HputNf8FrBBS9gM1k,9422
|
|
385
373
|
neuralnode/providers/base.py,sha256=kkNDOuij2E4TM2lsbJKoRwUDd2n6u0C67Qg0hy449iE,12668
|
|
386
374
|
neuralnode/providers/embeddings.py,sha256=P2AO36a0j6kd2ldN0CpVJZ0q0hDkKlUlTlf-_8x3Iz4,37551
|
|
387
|
-
neuralnode/providers/horus.py,sha256=
|
|
375
|
+
neuralnode/providers/horus.py,sha256=M1q1nuxqMAfanQdE02cud13SCr1PA4DwyoizVtM7PYU,98785
|
|
388
376
|
neuralnode/providers/local_providers.py,sha256=5c5E7kLhk-YTEp9EXNX3-BIiacvWPgxMRZye9A6htNA,61417
|
|
389
377
|
neuralnode/providers/text_generation.py,sha256=FMTJ6aDe78ODvnZ7WEFRfqeNiij0sBR0pRRjU7rxxag,36513
|
|
390
378
|
neuralnode/providers/universal_local.py,sha256=DNqICw0G99eR5BnXjYCeEvjUhnoSS22D4HnLs0x9Y70,19541
|
|
@@ -419,7 +407,7 @@ neuralnode/utils/logger.py,sha256=vh0K2JYqqgwdtyYjtNbPK9QW6ZhOEqpp_NOHghl94e8,86
|
|
|
419
407
|
neuralnode/utils/metrics.py,sha256=z5JHDV-I5foOiY8j7vQE-GYyTSM5p04_EcWBP7qJlY4,7389
|
|
420
408
|
neuralnode/vectorstores/__init__.py,sha256=vCQ-L7jbhTVEQPrLehpzhm6K3SQIprUicF1X7BOF8w8,28172
|
|
421
409
|
neuralnode/vision/__init__.py,sha256=MepTSuvOBXjGJK1i2zxZLSGlBm-WOV1ylu4Xa-pAObw,5756
|
|
422
|
-
neuralnode-2.2.
|
|
423
|
-
neuralnode-2.2.
|
|
424
|
-
neuralnode-2.2.
|
|
425
|
-
neuralnode-2.2.
|
|
410
|
+
neuralnode-2.2.2.dist-info/METADATA,sha256=ckW4ArzefKInotxmLZ3hSgrtyM8-IKIkBQn2n46wWZg,14175
|
|
411
|
+
neuralnode-2.2.2.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
|
|
412
|
+
neuralnode-2.2.2.dist-info/licenses/LICENSE,sha256=Pwd03UGSoleqoehkTRuTj6FwLzMknjSiVDuLOD2sfts,1067
|
|
413
|
+
neuralnode-2.2.2.dist-info/RECORD,,
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
name: Bug Report
|
|
2
|
-
description: Create a report to help us improve.
|
|
3
|
-
labels:
|
|
4
|
-
- bug
|
|
5
|
-
- en
|
|
6
|
-
# - help wanted
|
|
7
|
-
# Automatically assign the issue to:
|
|
8
|
-
# assignees: DavidsonGomes
|
|
9
|
-
body:
|
|
10
|
-
- type: checkboxes
|
|
11
|
-
id: terms
|
|
12
|
-
attributes:
|
|
13
|
-
label: Welcome!
|
|
14
|
-
description: |
|
|
15
|
-
The issue tracker is only for reporting bugs and feature requests.
|
|
16
|
-
For user-related support questions, please visit:
|
|
17
|
-
- [Discord](https://neuralnode-whatsapp-gateway.com/discord)
|
|
18
|
-
- [WhatsApp Group](https://neuralnode-whatsapp-gateway.com/whatsapp)
|
|
19
|
-
<br/>
|
|
20
|
-
|
|
21
|
-
**DO NOT OPEN AN ISSUE FOR GENERAL SUPPORT QUESTIONS.**
|
|
22
|
-
|
|
23
|
-
options:
|
|
24
|
-
- label: Yes, I have searched for similar issues on [GitHub](https://github.com/EvolutionAPI/neuralnode-whatsapp-gateway/issues) and found none.
|
|
25
|
-
required: true
|
|
26
|
-
|
|
27
|
-
- type: textarea
|
|
28
|
-
attributes:
|
|
29
|
-
label: What did you do?
|
|
30
|
-
description: |
|
|
31
|
-
How to write a good bug report?
|
|
32
|
-
|
|
33
|
-
- Respect the issue template as much as possible.
|
|
34
|
-
- The title should be short and descriptive.
|
|
35
|
-
- Explain the conditions that led you to report this issue: the context.
|
|
36
|
-
- The context should lead to something, an idea or problem you are facing.
|
|
37
|
-
- Be clear and concise.
|
|
38
|
-
- Format your messages to help the reader focus on what matters and understand the structure of your message, use [Markdown syntax](https://help.github.com/articles/github-flavored-markdown)
|
|
39
|
-
placeholder: Describe the problem you encountered in detail.
|
|
40
|
-
validations:
|
|
41
|
-
required: true
|
|
42
|
-
|
|
43
|
-
- type: textarea
|
|
44
|
-
attributes:
|
|
45
|
-
label: What did you expect?
|
|
46
|
-
placeholder: Describe what you expected to happen.
|
|
47
|
-
validations:
|
|
48
|
-
required: true
|
|
49
|
-
|
|
50
|
-
- type: textarea
|
|
51
|
-
attributes:
|
|
52
|
-
label: What did you observe instead of what you expected?
|
|
53
|
-
placeholder: Explain what actually happens when you follow the steps above.
|
|
54
|
-
validations:
|
|
55
|
-
required: true
|
|
56
|
-
|
|
57
|
-
- type: textarea
|
|
58
|
-
attributes:
|
|
59
|
-
label: Screenshots/Videos
|
|
60
|
-
placeholder: |
|
|
61
|
-
If possible, add screenshots or videos that illustrate the problem. This can be extremely helpful in understanding the issue better.
|
|
62
|
-
|
|
63
|
-
- type: textarea
|
|
64
|
-
attributes:
|
|
65
|
-
label: Which version of the API are you using?
|
|
66
|
-
description: |
|
|
67
|
-
Enter the version number found in the `version` property of the **package.json**.
|
|
68
|
-
placeholder: Paste the version here.
|
|
69
|
-
validations:
|
|
70
|
-
required: true
|
|
71
|
-
|
|
72
|
-
- type: dropdown
|
|
73
|
-
id: select
|
|
74
|
-
attributes:
|
|
75
|
-
label: What is your environment?
|
|
76
|
-
options:
|
|
77
|
-
- Windows
|
|
78
|
-
- Linux
|
|
79
|
-
- Mac
|
|
80
|
-
- Docker
|
|
81
|
-
- Other
|
|
82
|
-
validations:
|
|
83
|
-
required: true
|
|
84
|
-
|
|
85
|
-
- type: textarea
|
|
86
|
-
attributes:
|
|
87
|
-
label: Other environment specifications
|
|
88
|
-
placeholder: 'Hardware/Software: [e.g., CPU, GPU]'
|
|
89
|
-
validations:
|
|
90
|
-
required: false
|
|
91
|
-
|
|
92
|
-
- type: textarea
|
|
93
|
-
attributes:
|
|
94
|
-
label: If applicable, paste the log output
|
|
95
|
-
description: |
|
|
96
|
-
Please attach any logs that might be related to the issue.
|
|
97
|
-
If the logs contain sensitive information, consider sending them privately to one of the project maintainers.
|
|
98
|
-
placeholder: Paste the application log here.
|
|
99
|
-
validations:
|
|
100
|
-
required: false
|
|
101
|
-
|
|
102
|
-
- type: textarea
|
|
103
|
-
attributes:
|
|
104
|
-
label: Additional Notes
|
|
105
|
-
description: Include any other information you think might be useful to understand or resolve the bug.
|
|
106
|
-
validations:
|
|
107
|
-
required: false
|