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.
Files changed (20) hide show
  1. neuralnode/__init__.py +1 -1
  2. neuralnode/integrations/openclaw.py +2 -7
  3. neuralnode/integrations/whatsapp.py +3 -4
  4. neuralnode/providers/horus.py +179 -22
  5. {neuralnode-2.2.0.dist-info → neuralnode-2.2.2.dist-info}/METADATA +36 -13
  6. {neuralnode-2.2.0.dist-info → neuralnode-2.2.2.dist-info}/RECORD +8 -20
  7. neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/-en--bug-report.yaml +0 -107
  8. neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/-en--feature-request.yaml +0 -86
  9. neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/-pt--reportar-bug.yaml +0 -108
  10. neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/-pt--solicitar-recurso.yaml +0 -86
  11. neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/bug_report.yml +0 -81
  12. neuralnode/integrations/whatsapp/evolution-api/.github/ISSUE_TEMPLATE/feature_request.yml +0 -85
  13. neuralnode/integrations/whatsapp/evolution-api/.github/pull_request_template.md +0 -41
  14. neuralnode/integrations/whatsapp/evolution-api/.github/workflows/check_code_quality.yml +0 -42
  15. neuralnode/integrations/whatsapp/evolution-api/.github/workflows/publish_docker_image.yml +0 -50
  16. neuralnode/integrations/whatsapp/evolution-api/.github/workflows/publish_docker_image_homolog.yml +0 -50
  17. neuralnode/integrations/whatsapp/evolution-api/.github/workflows/publish_docker_image_latest.yml +0 -50
  18. neuralnode/integrations/whatsapp/evolution-api/.github/workflows/security.yml +0 -55
  19. {neuralnode-2.2.0.dist-info → neuralnode-2.2.2.dist-info}/WHEEL +0 -0
  20. {neuralnode-2.2.0.dist-info → neuralnode-2.2.2.dist-info}/licenses/LICENSE +0 -0
neuralnode/__init__.py CHANGED
@@ -42,7 +42,7 @@ Quick Start::
42
42
  text = sr.listen()
43
43
  """
44
44
 
45
- __version__ = "2.2.0"
45
+ __version__ = "2.2.2"
46
46
  __author__ = "NeuralNode Contributors"
47
47
 
48
48
  # ── Core types ────────────────────────────────────────────────────────────────
@@ -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
- pm_cmd_str,
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
- startup_cmd_str,
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
- "npm run dev" if (gateway_dir / "src").exists() else "npm start",
245
- shell=True,
244
+ startup_cmd,
246
245
  cwd=str(gateway_dir),
247
246
  stdout=subprocess.DEVNULL,
248
247
  stderr=subprocess.DEVNULL
@@ -172,7 +172,7 @@ class HorusProvider(BaseLLMProvider):
172
172
 
173
173
  provider_name = "horus"
174
174
  provider_type = ProviderType.LOCAL
175
- default_model = "tokenaii/horus"
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=HORUS_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 = "tokenaii/horus",
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="tokenaii/Horus-Lens-1.0-GGUF", filename="Horus-Lens-1.0-Q3_K_M.gguf")
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
- # Case-insensitive normalization of model_id to match keys in HORUS_MODELS
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["context_window"] = HORUS_CONTEXT_WINDOW
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": HORUS_CONTEXT_WINDOW,
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(HORUS_CONTEXT_WINDOW - max_new_tokens, 1)
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(HORUS_CONTEXT_WINDOW - max_new_tokens, 1)
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": HORUS_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 {model_id: dict(info, context_window=HORUS_CONTEXT_WINDOW) for model_id, info in cls.HORUS_MODELS.items()}
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 exact official Hugging Face names."""
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 = "tokenaii/horus", **kwargs) -> HorusProvider:
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 = "tokenaii/Horus-Lens-1.0", **kwargs) -> HorusProvider:
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.0
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="tokenaii/horus/Horus-1.0-4B",
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
- - `tokenaii/horus`
256
- - `tokenaii/horus/Horus-1.0-4B`
257
- - `tokenaii/Horus-1.0-4B-GGUF/Horus-1.0-4B-Q4_K_M.gguf`
258
- - `tokenaii/Horus-1.0-4B-GGUF/Horus-1.0-4B-Q5_K_M.gguf`
259
- - `tokenaii/Horus-1.0-4B-GGUF/Horus-1.0-4B-Q6_K.gguf`
260
- - `tokenaii/Horus-1.0-4B-GGUF/Horus-1.0-4B-Q8_0.gguf`
261
- - `tokenaii/Horus-1.0-4B-GGUF/Horus-1.0-4B-F16.gguf`
262
- - `tokenaii/Horus-Lens-1.0`
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("tokenaii/Horus-Lens-1.0").load()
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="tokenaii/horus/Horus-1.0-4B",
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="tokenaii/horus/Horus-1.0-4B")
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=xNp3CZXIyViylDZnZgnOv0lRYBmwxw5HD68nOZ341mA,25360
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=rOtb2etkT3XGLyF2Ioc4hjHmgmmpI72A_186O1Xlr-U,18497
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=v9oEQncY7JeHQQNl7_uLofHQos2eNrSZUeqzM482u6o,14503
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=jelRq9EpzZWYF72oOQzjjjnH1RoW1ZupHDAHtGVUp18,92673
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.0.dist-info/METADATA,sha256=FQv77E2Xcjsfn7bsXZzvPXnI_TqVXcQG-Dnauu2kk7g,13943
423
- neuralnode-2.2.0.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
424
- neuralnode-2.2.0.dist-info/licenses/LICENSE,sha256=Pwd03UGSoleqoehkTRuTj6FwLzMknjSiVDuLOD2sfts,1067
425
- neuralnode-2.2.0.dist-info/RECORD,,
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