neuralnode 2.2.8__tar.gz → 2.2.10__tar.gz
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-2.2.8 → neuralnode-2.2.10}/.env.example +22 -35
- {neuralnode-2.2.8 → neuralnode-2.2.10}/.github/PULL_REQUEST_TEMPLATE.md +15 -15
- {neuralnode-2.2.8 → neuralnode-2.2.10}/.github/workflows/tests.yml +86 -86
- {neuralnode-2.2.8 → neuralnode-2.2.10}/.gitignore +41 -38
- neuralnode-2.2.10/CHANGELOG.md +97 -0
- {neuralnode-2.2.8 → neuralnode-2.2.10}/CONTRIBUTING.md +40 -40
- {neuralnode-2.2.8 → neuralnode-2.2.10}/LICENSE +157 -157
- {neuralnode-2.2.8 → neuralnode-2.2.10}/NOTICE +15 -15
- {neuralnode-2.2.8 → neuralnode-2.2.10}/PKG-INFO +222 -383
- neuralnode-2.2.10/README.md +332 -0
- {neuralnode-2.2.8 → neuralnode-2.2.10}/THIRD_PARTY_NOTICES.md +12 -12
- {neuralnode-2.2.8 → neuralnode-2.2.10}/TOKENAI_CLA.md +59 -59
- {neuralnode-2.2.8 → neuralnode-2.2.10}/TRADEMARKS.md +21 -21
- {neuralnode-2.2.8 → neuralnode-2.2.10}/docs/documentation.md +263 -262
- {neuralnode-2.2.8 → neuralnode-2.2.10}/docs/replica_voice_ids.csv +21 -21
- {neuralnode-2.2.8 → neuralnode-2.2.10}/docs/replica_voice_ids.md +41 -41
- {neuralnode-2.2.8 → neuralnode-2.2.10}/docs/telegram_guide.md +125 -125
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/agent_with_tools.py +82 -82
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/basic_chat.py +36 -36
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/01_basic_usage.py +21 -21
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/02_horus_lens.py +16 -16
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/03_one_liner.py +17 -17
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/04_custom_cache.py +17 -17
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/05_4bit_quantization.py +20 -20
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/06_8bit_quantization.py +17 -17
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/07_multi_gpu.py +15 -15
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/08_flash_attention.py +16 -16
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/09_data_types.py +26 -26
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/10_generation_params.py +34 -34
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/11_streaming.py +13 -13
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/12_chat_templates.py +22 -22
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/13_offline_mode.py +14 -14
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/14_force_download.py +14 -14
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/15_model_info.py +24 -24
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/16_cpu_offloading.py +17 -17
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/17_cpu_only.py +16 -16
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/18_production_setup.py +43 -43
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/19_gguf_4bit.py +14 -14
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/20_gguf_5bit.py +13 -13
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/21_gguf_6bit.py +13 -13
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/22_gguf_8bit.py +13 -13
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/23_gguf_16bit.py +14 -14
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/24_list_models.py +26 -26
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/25_interactive_chat.py +53 -53
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/26_horus_hiero.py +16 -16
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_codes_camples/README.md +70 -70
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_download_guide.py +36 -36
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_examples.py +257 -257
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_tq_ready_gguf.py +61 -61
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/horus_transformers_features.py +512 -512
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/local_models.py +107 -107
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/neuralnode_v21_complete_demo.py +21 -21
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/openclaw_demo.py +106 -106
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/shade_model_with_tools.py +23 -23
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/telegram_bot_demo.py +37 -37
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/thinking_mode_example.py +231 -231
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/tts_demo.py +26 -26
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/turboquant_example.py +38 -38
- {neuralnode-2.2.8 → neuralnode-2.2.10}/examples/v3_features.py +35 -35
- neuralnode-2.2.10/media/neuralnode-dark-transparent.png +0 -0
- {neuralnode-2.2.8 → neuralnode-2.2.10}/pyproject.toml +269 -279
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/__init__.py +884 -912
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/agents/__init__.py +30 -30
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/agents/agents.py +906 -906
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/agents/base.py +233 -233
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/agents/thinking.py +162 -162
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/chains/__init__.py +629 -629
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/config/__init__.py +241 -241
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/core/__init__.py +472 -465
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/core/openai_blocker.py +29 -29
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/diagnostics/__init__.py +782 -782
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/integrations/__init__.py +25 -28
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/integrations/discord.py +193 -193
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/integrations/openclaw.py +656 -623
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/integrations/slack.py +181 -181
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/integrations/telegram.py +689 -689
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/memory/__init__.py +13 -13
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/memory/advanced.py +508 -508
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/memory/conversation.py +148 -148
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/memory/file.py +121 -121
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/memory/sliding.py +85 -85
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/memory/summary.py +131 -131
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/prompts/__init__.py +703 -703
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/__init__.py +342 -353
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/base.py +383 -383
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/chat/__init__.py +60 -70
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/chat/ai21.py +79 -79
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/chat/anthropic.py +152 -152
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/chat/bedrock.py +116 -116
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/chat/cohere.py +123 -123
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/chat/deepseek.py +126 -126
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/chat/fireworks.py +84 -84
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/chat/google.py +167 -167
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/chat/groq.py +114 -114
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/chat/mistral.py +120 -120
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/chat/openai.py +302 -302
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/chat/perplexity.py +94 -94
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/chat/together.py +124 -124
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/chat/vertex.py +104 -104
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/embeddings.py +1176 -1170
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/hfhub.py +237 -237
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/horus.py +2774 -2774
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/image_generation.py +135 -135
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/local/__init__.py +319 -319
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/local_providers.py +1907 -1836
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/text_generation.py +1174 -1174
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/providers/universal_local.py +750 -750
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/rag/__init__.py +988 -988
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/reasoning/__init__.py +679 -679
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/replica.py +225 -225
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/speech/__init__.py +479 -479
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/thinking.py +380 -380
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/tools/__init__.py +54 -54
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/tools/advanced.py +758 -758
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/tools/multisearch.py +612 -612
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/tools/system/__init__.py +248 -248
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/tools/system/operations.py +471 -471
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/tools/web/__init__.py +261 -261
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/tts/__init__.py +445 -445
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/turboquant.py +552 -552
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/utils/__init__.py +5 -5
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/utils/dependencies.py +89 -89
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/utils/logger.py +277 -277
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/utils/metrics.py +220 -220
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/vectorstores/__init__.py +871 -871
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/vision/__init__.py +192 -192
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/neuralnode/voice.py +82 -82
- {neuralnode-2.2.8 → neuralnode-2.2.10}/src/nn/__init__.py +6 -6
- {neuralnode-2.2.8 → neuralnode-2.2.10}/tests/test_agents_basic.py +78 -78
- {neuralnode-2.2.8 → neuralnode-2.2.10}/tests/test_hfhub.py +297 -297
- {neuralnode-2.2.8 → neuralnode-2.2.10}/tests/test_image_generation.py +78 -78
- {neuralnode-2.2.8 → neuralnode-2.2.10}/tests/test_memory.py +39 -39
- {neuralnode-2.2.8 → neuralnode-2.2.10}/tests/test_openclaw.py +225 -225
- {neuralnode-2.2.8 → neuralnode-2.2.10}/tests/test_provider_capabilities.py +90 -90
- {neuralnode-2.2.8 → neuralnode-2.2.10}/tests/test_providers_mocked.py +191 -109
- {neuralnode-2.2.8 → neuralnode-2.2.10}/tests/test_rag.py +73 -73
- {neuralnode-2.2.8 → neuralnode-2.2.10}/tests/test_refactoring.py +38 -38
- {neuralnode-2.2.8 → neuralnode-2.2.10}/tests/test_release_readiness.py +50 -53
- {neuralnode-2.2.8 → neuralnode-2.2.10}/tests/test_voice.py +146 -146
- neuralnode-2.2.8/.ci-dist/neuralnode-2.2.8-py3-none-any.whl +0 -0
- neuralnode-2.2.8/.ci-dist/neuralnode-2.2.8.tar.gz +0 -0
- neuralnode-2.2.8/Dockerfile +0 -44
- neuralnode-2.2.8/README.md +0 -488
- neuralnode-2.2.8/docker-compose.yml +0 -74
- neuralnode-2.2.8/docs/ecosystem_plan.md +0 -482
- neuralnode-2.2.8/docs/model_api.md +0 -76
- neuralnode-2.2.8/examples/horus_cyber_nano_agent_mode.py +0 -67
- neuralnode-2.2.8/examples/horus_cyber_nano_early_access.py +0 -22
- neuralnode-2.2.8/examples/whatsapp_bot_demo.py +0 -2
- neuralnode-2.2.8/horus_chat_voice.py +0 -61
- neuralnode-2.2.8/neuralnode_horus_replica_telegram.ipynb +0 -405
- neuralnode-2.2.8/publish.bat +0 -71
- neuralnode-2.2.8/publish.sh +0 -68
- neuralnode-2.2.8/requirements_shade.txt +0 -40
- neuralnode-2.2.8/scripts/setup.py +0 -127
- neuralnode-2.2.8/src/debug_import.py +0 -37
- neuralnode-2.2.8/src/neuralnode/api.py +0 -341
- neuralnode-2.2.8/src/neuralnode/integrations/whatsapp.py +0 -99
- neuralnode-2.2.8/src/neuralnode/providers/chat/h_preview.py +0 -113
- neuralnode-2.2.8/src/neuralnode/providers/chat/horus_cyber_nano.py +0 -375
- neuralnode-2.2.8/tests/test_horus_cyber_nano_api.py +0 -222
- {neuralnode-2.2.8 → neuralnode-2.2.10}/.github/workflows/publish.yml +0 -0
- {neuralnode-2.2.8 → neuralnode-2.2.10}/docs/assets/neuralnode-logo-transparent.png +0 -0
- {neuralnode-2.2.8 → neuralnode-2.2.10}/media/neuralnode.png +0 -0
|
@@ -1,35 +1,22 @@
|
|
|
1
|
-
# NeuralNode Environment Configuration
|
|
2
|
-
# Copy this file to .env and fill in your API keys
|
|
3
|
-
|
|
4
|
-
# OpenAI Configuration
|
|
5
|
-
OPENAI_API_KEY=sk-your-openai-api-key-here
|
|
6
|
-
OPENAI_BASE_URL=https://api.openai.com/v1
|
|
7
|
-
|
|
8
|
-
# Anthropic Configuration
|
|
9
|
-
ANTHROPIC_API_KEY=sk-ant-your-anthropic-api-key-here
|
|
10
|
-
|
|
11
|
-
# Google (Gemini) Configuration
|
|
12
|
-
GOOGLE_API_KEY=your-google-api-key-here
|
|
13
|
-
|
|
14
|
-
# Ollama Configuration (for local models)
|
|
15
|
-
# No API key needed, just ensure Ollama is running
|
|
16
|
-
OLLAMA_BASE_URL=http://localhost:11434
|
|
17
|
-
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
NEURALNODE_API_DB=neuralnode-api.sqlite3
|
|
24
|
-
NEURALNODE_API_KEY=nn-your-24-character-token
|
|
25
|
-
NEURALNODE_API_BASE_URL=http://127.0.0.1:8000/v1
|
|
26
|
-
H_PREVIEW_UPSTREAM_URL=http://127.0.0.1:8001/v1
|
|
27
|
-
H_PREVIEW_UPSTREAM_MODEL=DavidAU/Qwen3.8-27B-TURBO-Fable-Cold-Fusion-735-882-Heretic-Uncensored-NM-DAU
|
|
28
|
-
# Optional: only set this when the remote model server requires an API key.
|
|
29
|
-
# H_PREVIEW_UPSTREAM_API_KEY=
|
|
30
|
-
|
|
31
|
-
# NeuralNode Settings
|
|
32
|
-
NEURALNODE_DEFAULT_PROVIDER=auto
|
|
33
|
-
NEURALNODE_MEMORY_ENABLED=true
|
|
34
|
-
NEURALNODE_SAFE_MODE=true
|
|
35
|
-
NEURALNODE_LOG_LEVEL=INFO
|
|
1
|
+
# NeuralNode Environment Configuration
|
|
2
|
+
# Copy this file to .env and fill in your API keys
|
|
3
|
+
|
|
4
|
+
# OpenAI Configuration
|
|
5
|
+
OPENAI_API_KEY=sk-your-openai-api-key-here
|
|
6
|
+
OPENAI_BASE_URL=https://api.openai.com/v1
|
|
7
|
+
|
|
8
|
+
# Anthropic Configuration
|
|
9
|
+
ANTHROPIC_API_KEY=sk-ant-your-anthropic-api-key-here
|
|
10
|
+
|
|
11
|
+
# Google (Gemini) Configuration
|
|
12
|
+
GOOGLE_API_KEY=your-google-api-key-here
|
|
13
|
+
|
|
14
|
+
# Ollama Configuration (for local models)
|
|
15
|
+
# No API key needed, just ensure Ollama is running
|
|
16
|
+
OLLAMA_BASE_URL=http://localhost:11434
|
|
17
|
+
|
|
18
|
+
# NeuralNode Settings
|
|
19
|
+
NEURALNODE_DEFAULT_PROVIDER=auto
|
|
20
|
+
NEURALNODE_MEMORY_ENABLED=true
|
|
21
|
+
NEURALNODE_SAFE_MODE=true
|
|
22
|
+
NEURALNODE_LOG_LEVEL=INFO
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
## Summary
|
|
2
|
-
|
|
3
|
-
Describe the problem and the change made.
|
|
4
|
-
|
|
5
|
-
## Validation
|
|
6
|
-
|
|
7
|
-
- [ ] I ran the relevant tests and checks.
|
|
8
|
-
- [ ] I added or updated tests where appropriate.
|
|
9
|
-
- [ ] I did not include secrets, credentials, or private data.
|
|
10
|
-
- [ ] I have read and agree to [TOKENAI_CLA.md](../TOKENAI_CLA.md).
|
|
11
|
-
- [ ] I have identified any third-party code, data, or assets included in this PR.
|
|
12
|
-
|
|
13
|
-
## Notes for review
|
|
14
|
-
|
|
15
|
-
Add compatibility notes, migration details, or known limitations here.
|
|
1
|
+
## Summary
|
|
2
|
+
|
|
3
|
+
Describe the problem and the change made.
|
|
4
|
+
|
|
5
|
+
## Validation
|
|
6
|
+
|
|
7
|
+
- [ ] I ran the relevant tests and checks.
|
|
8
|
+
- [ ] I added or updated tests where appropriate.
|
|
9
|
+
- [ ] I did not include secrets, credentials, or private data.
|
|
10
|
+
- [ ] I have read and agree to [TOKENAI_CLA.md](../TOKENAI_CLA.md).
|
|
11
|
+
- [ ] I have identified any third-party code, data, or assets included in this PR.
|
|
12
|
+
|
|
13
|
+
## Notes for review
|
|
14
|
+
|
|
15
|
+
Add compatibility notes, migration details, or known limitations here.
|
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
name: Tests
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [ main, develop ]
|
|
6
|
-
pull_request:
|
|
7
|
-
branches: [ main ]
|
|
8
|
-
|
|
9
|
-
jobs:
|
|
10
|
-
build:
|
|
11
|
-
runs-on: ubuntu-24.04
|
|
12
|
-
steps:
|
|
13
|
-
- uses: actions/checkout@v7
|
|
14
|
-
|
|
15
|
-
- name: Set up Python
|
|
16
|
-
uses: actions/setup-python@v7
|
|
17
|
-
with:
|
|
18
|
-
python-version: "3.12"
|
|
19
|
-
|
|
20
|
-
- name: Install build tools
|
|
21
|
-
run: python -m pip install --upgrade build twine
|
|
22
|
-
|
|
23
|
-
- name: Build source distribution and wheel
|
|
24
|
-
run: python -m build --outdir .ci-dist
|
|
25
|
-
|
|
26
|
-
- name: Validate package metadata
|
|
27
|
-
run: python -m twine check .ci-dist/*
|
|
28
|
-
|
|
29
|
-
- name: Install wheel and verify package version
|
|
30
|
-
run: |
|
|
31
|
-
python -m pip install --force-reinstall .ci-dist/*.whl
|
|
32
|
-
python -c "import neuralnode; assert neuralnode.__version__ == '2.2.
|
|
33
|
-
|
|
34
|
-
test:
|
|
35
|
-
# Python 3.9 is no longer available on the newest Ubuntu runner image.
|
|
36
|
-
runs-on: ubuntu-24.04
|
|
37
|
-
strategy:
|
|
38
|
-
matrix:
|
|
39
|
-
python-version: ["3.9", "3.10", "3.11", "3.12"]
|
|
40
|
-
|
|
41
|
-
steps:
|
|
42
|
-
- uses: actions/checkout@v7
|
|
43
|
-
|
|
44
|
-
- name: Set up Python ${{ matrix.python-version }}
|
|
45
|
-
uses: actions/setup-python@v7
|
|
46
|
-
with:
|
|
47
|
-
python-version: ${{ matrix.python-version }}
|
|
48
|
-
|
|
49
|
-
- name: Install dependencies
|
|
50
|
-
run: |
|
|
51
|
-
python -m pip install --upgrade pip
|
|
52
|
-
pip install -e ".[dev]"
|
|
53
|
-
|
|
54
|
-
- name: Run tests
|
|
55
|
-
run: |
|
|
56
|
-
pytest tests/ -v --cov=src/neuralnode --cov-report=xml --cov-report=term
|
|
57
|
-
|
|
58
|
-
- name: Upload coverage to Codecov
|
|
59
|
-
uses: codecov/codecov-action@v7
|
|
60
|
-
with:
|
|
61
|
-
files: ./coverage.xml
|
|
62
|
-
flags: unittests
|
|
63
|
-
name: codecov-umbrella
|
|
64
|
-
|
|
65
|
-
lint:
|
|
66
|
-
runs-on: ubuntu-24.04
|
|
67
|
-
steps:
|
|
68
|
-
- uses: actions/checkout@v7
|
|
69
|
-
|
|
70
|
-
- name: Set up Python
|
|
71
|
-
uses: actions/setup-python@v7
|
|
72
|
-
with:
|
|
73
|
-
python-version: "3.11"
|
|
74
|
-
|
|
75
|
-
- name: Install dependencies
|
|
76
|
-
run: |
|
|
77
|
-
python -m pip install --upgrade pip
|
|
78
|
-
pip install black ruff mypy
|
|
79
|
-
|
|
80
|
-
- name: Check formatting with black
|
|
81
|
-
run: black --check src/neuralnode
|
|
82
|
-
|
|
83
|
-
# The legacy tree has broad style/type debt; keep CI focused on undefined
|
|
84
|
-
# names while that debt is addressed incrementally.
|
|
85
|
-
- name: Check undefined names with ruff
|
|
86
|
-
run: ruff check src/neuralnode --select F821
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main, develop ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build:
|
|
11
|
+
runs-on: ubuntu-24.04
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v7
|
|
14
|
+
|
|
15
|
+
- name: Set up Python
|
|
16
|
+
uses: actions/setup-python@v7
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.12"
|
|
19
|
+
|
|
20
|
+
- name: Install build tools
|
|
21
|
+
run: python -m pip install --upgrade build twine
|
|
22
|
+
|
|
23
|
+
- name: Build source distribution and wheel
|
|
24
|
+
run: python -m build --outdir .ci-dist
|
|
25
|
+
|
|
26
|
+
- name: Validate package metadata
|
|
27
|
+
run: python -m twine check .ci-dist/*
|
|
28
|
+
|
|
29
|
+
- name: Install wheel and verify package version
|
|
30
|
+
run: |
|
|
31
|
+
python -m pip install --force-reinstall .ci-dist/*.whl
|
|
32
|
+
python -c "import neuralnode; assert neuralnode.__version__ == '2.2.10'; print(neuralnode.__version__)"
|
|
33
|
+
|
|
34
|
+
test:
|
|
35
|
+
# Python 3.9 is no longer available on the newest Ubuntu runner image.
|
|
36
|
+
runs-on: ubuntu-24.04
|
|
37
|
+
strategy:
|
|
38
|
+
matrix:
|
|
39
|
+
python-version: ["3.9", "3.10", "3.11", "3.12"]
|
|
40
|
+
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v7
|
|
43
|
+
|
|
44
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
45
|
+
uses: actions/setup-python@v7
|
|
46
|
+
with:
|
|
47
|
+
python-version: ${{ matrix.python-version }}
|
|
48
|
+
|
|
49
|
+
- name: Install dependencies
|
|
50
|
+
run: |
|
|
51
|
+
python -m pip install --upgrade pip
|
|
52
|
+
pip install -e ".[dev]"
|
|
53
|
+
|
|
54
|
+
- name: Run tests
|
|
55
|
+
run: |
|
|
56
|
+
pytest tests/ -v --cov=src/neuralnode --cov-report=xml --cov-report=term
|
|
57
|
+
|
|
58
|
+
- name: Upload coverage to Codecov
|
|
59
|
+
uses: codecov/codecov-action@v7
|
|
60
|
+
with:
|
|
61
|
+
files: ./coverage.xml
|
|
62
|
+
flags: unittests
|
|
63
|
+
name: codecov-umbrella
|
|
64
|
+
|
|
65
|
+
lint:
|
|
66
|
+
runs-on: ubuntu-24.04
|
|
67
|
+
steps:
|
|
68
|
+
- uses: actions/checkout@v7
|
|
69
|
+
|
|
70
|
+
- name: Set up Python
|
|
71
|
+
uses: actions/setup-python@v7
|
|
72
|
+
with:
|
|
73
|
+
python-version: "3.11"
|
|
74
|
+
|
|
75
|
+
- name: Install dependencies
|
|
76
|
+
run: |
|
|
77
|
+
python -m pip install --upgrade pip
|
|
78
|
+
pip install black ruff mypy
|
|
79
|
+
|
|
80
|
+
- name: Check formatting with black
|
|
81
|
+
run: black --check src/neuralnode
|
|
82
|
+
|
|
83
|
+
# The legacy tree has broad style/type debt; keep CI focused on undefined
|
|
84
|
+
# names while that debt is addressed incrementally.
|
|
85
|
+
- name: Check undefined names with ruff
|
|
86
|
+
run: ruff check src/neuralnode --select F821
|
|
@@ -1,38 +1,41 @@
|
|
|
1
|
-
# Python
|
|
2
|
-
__pycache__/
|
|
3
|
-
*.pyc
|
|
4
|
-
*.pyo
|
|
5
|
-
*.pyd
|
|
6
|
-
*.egg-info/
|
|
7
|
-
dist/
|
|
8
|
-
release-dist/
|
|
9
|
-
|
|
10
|
-
.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
.
|
|
38
|
-
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.pyc
|
|
4
|
+
*.pyo
|
|
5
|
+
*.pyd
|
|
6
|
+
*.egg-info/
|
|
7
|
+
dist/
|
|
8
|
+
release-dist/
|
|
9
|
+
.release-dist*/
|
|
10
|
+
.ci-dist/
|
|
11
|
+
.ci-dist-verify*/
|
|
12
|
+
.install-check*/
|
|
13
|
+
build/
|
|
14
|
+
.eggs/
|
|
15
|
+
|
|
16
|
+
# Virtual envs
|
|
17
|
+
.venv/
|
|
18
|
+
venv/
|
|
19
|
+
env/
|
|
20
|
+
|
|
21
|
+
# Local credentials and environment files
|
|
22
|
+
.env
|
|
23
|
+
.env.*
|
|
24
|
+
!.env.example
|
|
25
|
+
**/.env
|
|
26
|
+
**/.env.*
|
|
27
|
+
!**/.env.example
|
|
28
|
+
|
|
29
|
+
# Temp / outputs
|
|
30
|
+
outputs/
|
|
31
|
+
.tmp_*
|
|
32
|
+
*.gguf.tmp
|
|
33
|
+
|
|
34
|
+
# Test caches
|
|
35
|
+
.pytest_cache/
|
|
36
|
+
.mypy_cache/
|
|
37
|
+
.ruff_cache/
|
|
38
|
+
|
|
39
|
+
# OS
|
|
40
|
+
.DS_Store
|
|
41
|
+
Thumbs.db
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to NeuralNode are documented here.
|
|
4
|
+
|
|
5
|
+
## 2.2.10 — 2026-11-01
|
|
6
|
+
|
|
7
|
+
### Documentation and branding
|
|
8
|
+
|
|
9
|
+
- Added the dark NeuralNode wordmark as a transparent PNG for reliable display
|
|
10
|
+
on light PyPI pages and other light backgrounds.
|
|
11
|
+
- Updated the README image reference to the published transparent asset.
|
|
12
|
+
|
|
13
|
+
## 2.2.9 — 2026-11-01
|
|
14
|
+
|
|
15
|
+
### Integrations and runtime cleanup
|
|
16
|
+
|
|
17
|
+
- Removed the deprecated WhatsApp/Twilio integration and legacy API gateway.
|
|
18
|
+
- Removed obsolete provider and deployment artifacts from the maintained core.
|
|
19
|
+
- Updated the OpenClaw manager for the current OpenClaw configuration schema,
|
|
20
|
+
loopback-only gateway binding, token authentication, and OpenAI-compatible
|
|
21
|
+
chat-completions enablement.
|
|
22
|
+
- Added a blocking-chat fallback for OpenClaw streaming requests so providers
|
|
23
|
+
without native streaming can still complete gateway turns.
|
|
24
|
+
- Validated the NeuralNode → OpenClaw → local Qwen/llama.cpp path on AWS.
|
|
25
|
+
- Upgraded Ollama chat integration to the native `/api/chat` protocol with
|
|
26
|
+
role-preserving messages, streaming, structured output, and tool calls.
|
|
27
|
+
- Added Ollama native reasoning control through `thinking=True` or
|
|
28
|
+
`thinking=False`, preserving the model trace in response metadata.
|
|
29
|
+
- Updated Ollama embeddings to the batch `/api/embed` endpoint with a legacy
|
|
30
|
+
compatibility fallback.
|
|
31
|
+
- Removed the remaining Twilio optional dependency with the retired WhatsApp
|
|
32
|
+
integration.
|
|
33
|
+
|
|
34
|
+
## 2.2.8 — 2026-11-01
|
|
35
|
+
|
|
36
|
+
NeuralNode 2.2.8 is a feature and reliability release focused on local model
|
|
37
|
+
execution, multimodal workflows, integrations, and reproducible packaging.
|
|
38
|
+
|
|
39
|
+
### Multimodal and local model support
|
|
40
|
+
|
|
41
|
+
- Added local Hugging Face speech adapters:
|
|
42
|
+
- `HuggingFaceSTT` for audio transcription.
|
|
43
|
+
- `HuggingFaceTTS` for text-to-speech generation.
|
|
44
|
+
- Added configurable Hugging Face model IDs, lazy loading, language handling,
|
|
45
|
+
CPU/CUDA device selection, and WAV output for the speech adapters.
|
|
46
|
+
- Added local vision-language input support through the existing image chat
|
|
47
|
+
interface.
|
|
48
|
+
- Added Diffusers-compatible local text-to-image loading and generation.
|
|
49
|
+
- Improved local model generation determinism and provider identity.
|
|
50
|
+
- Improved model repository download handling for Hugging Face sources.
|
|
51
|
+
- Added explicit authentication support for private and gated Hugging Face
|
|
52
|
+
repositories using `HF_TOKEN` or an explicit token parameter.
|
|
53
|
+
- Made optional Horus runtime imports tolerant of environments where the heavy
|
|
54
|
+
local ML dependencies are not installed.
|
|
55
|
+
|
|
56
|
+
### Voice workflows
|
|
57
|
+
|
|
58
|
+
- Added a sequential `VoiceAgent` pipeline for file-based and push-to-talk
|
|
59
|
+
interactions:
|
|
60
|
+
|
|
61
|
+
`audio input → speech-to-text → agent/LLM turn → text-to-speech → audio output`
|
|
62
|
+
|
|
63
|
+
- Added HTTP speech adapters for connecting external STT and TTS services.
|
|
64
|
+
- Documented the distinction between sequential voice turns and low-latency,
|
|
65
|
+
full-duplex live audio. Full-duplex streaming is outside this release.
|
|
66
|
+
|
|
67
|
+
### Agents and tools
|
|
68
|
+
|
|
69
|
+
- Improved provider-backed agent tool calling.
|
|
70
|
+
- Added support for textual actions from tool-capable models.
|
|
71
|
+
- Improved tool-result message handling and buffered streaming compatibility.
|
|
72
|
+
- Preserved the existing agents, memory, RAG, embeddings, vector-store, and
|
|
73
|
+
integration APIs.
|
|
74
|
+
|
|
75
|
+
### Horus and OpenClaw
|
|
76
|
+
|
|
77
|
+
- Aligned Horus and OpenClaw integrations with the current public interfaces.
|
|
78
|
+
- Secured the OpenClaw local API behavior.
|
|
79
|
+
- Added test paths that do not require optional OpenClaw HTTP test packages.
|
|
80
|
+
### Release engineering
|
|
81
|
+
|
|
82
|
+
- Added source distribution and wheel build validation in CI.
|
|
83
|
+
- Isolated package build output from repository working files.
|
|
84
|
+
- Added trusted PyPI publishing through GitHub Actions and PyPI's OIDC
|
|
85
|
+
trusted-publishing flow.
|
|
86
|
+
- Added public repository, ownership, license, and release metadata alignment.
|
|
87
|
+
|
|
88
|
+
### Compatibility and limitations
|
|
89
|
+
|
|
90
|
+
- Python 3.9, 3.10, 3.11, and 3.12 are supported by the package metadata.
|
|
91
|
+
- Heavy local-model, image, and speech features remain optional extras; the
|
|
92
|
+
base installation does not install those large runtime dependencies.
|
|
93
|
+
- Public Hugging Face models can be loaded without a token. Private or gated
|
|
94
|
+
repositories require a valid `HF_TOKEN`.
|
|
95
|
+
- The voice pipeline in this release processes one turn at a time. It is not a
|
|
96
|
+
real-time, full-duplex audio session.
|
|
97
|
+
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
# Contributing to NeuralNode
|
|
2
|
-
|
|
3
|
-
Thank you for helping improve NeuralNode. Contributions may be submitted by
|
|
4
|
-
opening an issue, creating a fork, or opening a pull request.
|
|
5
|
-
|
|
6
|
-
## Pull request workflow
|
|
7
|
-
|
|
8
|
-
1. Create a focused branch or fork.
|
|
9
|
-
2. Explain the problem and the proposed change.
|
|
10
|
-
3. Include or update tests when appropriate.
|
|
11
|
-
4. Run the relevant checks locally.
|
|
12
|
-
5. Open a pull request against the default branch.
|
|
13
|
-
|
|
14
|
-
All pull requests are subject to review by TokenAI. Opening a pull request
|
|
15
|
-
does not guarantee acceptance or merge. TokenAI may accept, request changes,
|
|
16
|
-
reject, close, or remove a proposed contribution at its sole discretion.
|
|
17
|
-
|
|
18
|
-
## Contribution terms
|
|
19
|
-
|
|
20
|
-
By submitting a pull request, patch, issue attachment, or other contribution to
|
|
21
|
-
this repository, you confirm that you have read and agree to the
|
|
22
|
-
[TokenAI Contributor License Agreement](TOKENAI_CLA.md), and that:
|
|
23
|
-
|
|
24
|
-
- you have the legal right to submit the contribution;
|
|
25
|
-
- the contribution is your original work or you have permission to submit it;
|
|
26
|
-
- you have identified any third-party code, data, or assets included in it;
|
|
27
|
-
- you have not knowingly included secrets, credentials, or private data; and
|
|
28
|
-
- you agree to the copyright assignment and license grant in
|
|
29
|
-
[TOKENAI_CLA.md](TOKENAI_CLA.md).
|
|
30
|
-
|
|
31
|
-
## Attribution
|
|
32
|
-
|
|
33
|
-
Contributions become part of a project owned and maintained by TokenAI. Do not
|
|
34
|
-
remove existing NeuralNode or TokenAI notices. Derivative products and forks
|
|
35
|
-
must continue to follow [LICENSE](LICENSE) and [TRADEMARKS.md](TRADEMARKS.md).
|
|
36
|
-
|
|
37
|
-
## Code of conduct
|
|
38
|
-
|
|
39
|
-
Be respectful, constructive, and specific. Harassment, discrimination,
|
|
40
|
-
deliberate disclosure of secrets, and malicious code are not acceptable.
|
|
1
|
+
# Contributing to NeuralNode
|
|
2
|
+
|
|
3
|
+
Thank you for helping improve NeuralNode. Contributions may be submitted by
|
|
4
|
+
opening an issue, creating a fork, or opening a pull request.
|
|
5
|
+
|
|
6
|
+
## Pull request workflow
|
|
7
|
+
|
|
8
|
+
1. Create a focused branch or fork.
|
|
9
|
+
2. Explain the problem and the proposed change.
|
|
10
|
+
3. Include or update tests when appropriate.
|
|
11
|
+
4. Run the relevant checks locally.
|
|
12
|
+
5. Open a pull request against the default branch.
|
|
13
|
+
|
|
14
|
+
All pull requests are subject to review by TokenAI. Opening a pull request
|
|
15
|
+
does not guarantee acceptance or merge. TokenAI may accept, request changes,
|
|
16
|
+
reject, close, or remove a proposed contribution at its sole discretion.
|
|
17
|
+
|
|
18
|
+
## Contribution terms
|
|
19
|
+
|
|
20
|
+
By submitting a pull request, patch, issue attachment, or other contribution to
|
|
21
|
+
this repository, you confirm that you have read and agree to the
|
|
22
|
+
[TokenAI Contributor License Agreement](TOKENAI_CLA.md), and that:
|
|
23
|
+
|
|
24
|
+
- you have the legal right to submit the contribution;
|
|
25
|
+
- the contribution is your original work or you have permission to submit it;
|
|
26
|
+
- you have identified any third-party code, data, or assets included in it;
|
|
27
|
+
- you have not knowingly included secrets, credentials, or private data; and
|
|
28
|
+
- you agree to the copyright assignment and license grant in
|
|
29
|
+
[TOKENAI_CLA.md](TOKENAI_CLA.md).
|
|
30
|
+
|
|
31
|
+
## Attribution
|
|
32
|
+
|
|
33
|
+
Contributions become part of a project owned and maintained by TokenAI. Do not
|
|
34
|
+
remove existing NeuralNode or TokenAI notices. Derivative products and forks
|
|
35
|
+
must continue to follow [LICENSE](LICENSE) and [TRADEMARKS.md](TRADEMARKS.md).
|
|
36
|
+
|
|
37
|
+
## Code of conduct
|
|
38
|
+
|
|
39
|
+
Be respectful, constructive, and specific. Harassment, discrimination,
|
|
40
|
+
deliberate disclosure of secrets, and malicious code are not acceptable.
|