neuralnode 2.2.4__tar.gz → 2.2.6__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.4 → neuralnode-2.2.6}/.env.example +4 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/PKG-INFO +29 -2
- {neuralnode-2.2.4 → neuralnode-2.2.6}/README.md +28 -1
- neuralnode-2.2.6/deployment/early-access-api/002-retention-rate-limits.sql +35 -0
- neuralnode-2.2.6/deployment/early-access-api/003-security-hardening.sql +46 -0
- neuralnode-2.2.6/deployment/early-access-api/004-production-readiness.sql +39 -0
- neuralnode-2.2.6/deployment/early-access-api/Dockerfile +14 -0
- neuralnode-2.2.6/deployment/early-access-api/README.md +79 -0
- neuralnode-2.2.6/deployment/early-access-api/agent-mode-self-test.js +117 -0
- neuralnode-2.2.6/deployment/early-access-api/assets/tokenai-logo.png +0 -0
- neuralnode-2.2.6/deployment/early-access-api/backup-postgres.sh +61 -0
- neuralnode-2.2.6/deployment/early-access-api/docker-compose.aws.yml +94 -0
- neuralnode-2.2.6/deployment/early-access-api/gateway-self-test.js +92 -0
- neuralnode-2.2.6/deployment/early-access-api/install-production-readiness.sh +65 -0
- neuralnode-2.2.6/deployment/early-access-api/mock-model-server.js +47 -0
- neuralnode-2.2.6/deployment/early-access-api/model-gateway.js +1069 -0
- neuralnode-2.2.6/deployment/early-access-api/model-integration-audit.sql +21 -0
- neuralnode-2.2.6/deployment/early-access-api/operations-monitor.py +168 -0
- neuralnode-2.2.6/deployment/early-access-api/package-lock.json +1032 -0
- neuralnode-2.2.6/deployment/early-access-api/package.json +17 -0
- neuralnode-2.2.6/deployment/early-access-api/production-readiness-self-test.js +157 -0
- neuralnode-2.2.6/deployment/early-access-api/production-soak-test.js +118 -0
- neuralnode-2.2.6/deployment/early-access-api/queue-saturation-self-test.js +96 -0
- neuralnode-2.2.6/deployment/early-access-api/retention-rpm-self-test.js +162 -0
- neuralnode-2.2.6/deployment/early-access-api/run-retention-self-test.sh +22 -0
- neuralnode-2.2.6/deployment/early-access-api/security-hardening-self-test.js +191 -0
- neuralnode-2.2.6/deployment/early-access-api/server.patch +44 -0
- neuralnode-2.2.6/deployment/early-access-api/server.production.js +1512 -0
- neuralnode-2.2.6/deployment/early-access-api/tokenai-early-access-backup.service +8 -0
- neuralnode-2.2.6/deployment/early-access-api/tokenai-early-access-backup.timer +10 -0
- neuralnode-2.2.6/deployment/early-access-api/tokenai-early-access-monitor.service +13 -0
- neuralnode-2.2.6/deployment/early-access-api/tokenai-early-access-monitor.timer +11 -0
- neuralnode-2.2.6/deployment/model-server/README.md +36 -0
- neuralnode-2.2.6/deployment/model-server/configure-early-access-upstream +23 -0
- neuralnode-2.2.6/deployment/model-server/direct-vpc-cutover.md +24 -0
- neuralnode-2.2.6/deployment/model-server/horus-cyper-worker +28 -0
- neuralnode-2.2.6/deployment/model-server/horus-cyper-worker@.service +26 -0
- neuralnode-2.2.6/deployment/model-server/horus-model-tunnel.service +24 -0
- neuralnode-2.2.6/deployment/model-server/install-backup-receiver.sh +19 -0
- neuralnode-2.2.6/deployment/model-server/llama-response-parser-fallback.patch +15 -0
- neuralnode-2.2.6/deployment/model-server/receive-tokenai-backup +64 -0
- neuralnode-2.2.6/examples/horus_cyper_nano_agent_mode.py +67 -0
- neuralnode-2.2.6/examples/horus_cyper_nano_early_access.py +22 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/pyproject.toml +7 -1
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/__init__.py +5 -1
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/__init__.py +6 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/chat/__init__.py +8 -1
- neuralnode-2.2.6/src/neuralnode/providers/chat/horus_cyper_nano.py +374 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/horus.py +248 -13
- neuralnode-2.2.6/tests/test_horus_cyper_nano_api.py +199 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/tests/test_release_readiness.py +3 -3
- {neuralnode-2.2.4 → neuralnode-2.2.6}/.github/workflows/tests.yml +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/Dockerfile +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/LICENSE +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/docker-compose.yml +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/docs/documentation.md +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/docs/ecosystem_plan.md +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/docs/replica_voice_ids.csv +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/docs/replica_voice_ids.md +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/docs/telegram_guide.md +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/agent_with_tools.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/basic_chat.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/01_basic_usage.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/02_horus_lens.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/03_one_liner.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/04_custom_cache.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/05_4bit_quantization.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/06_8bit_quantization.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/07_multi_gpu.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/08_flash_attention.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/09_data_types.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/10_generation_params.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/11_streaming.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/12_chat_templates.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/13_offline_mode.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/14_force_download.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/15_model_info.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/16_cpu_offloading.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/17_cpu_only.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/18_production_setup.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/19_gguf_4bit.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/20_gguf_5bit.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/21_gguf_6bit.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/22_gguf_8bit.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/23_gguf_16bit.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/24_list_models.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/25_interactive_chat.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/26_horus_hiero.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_codes_camples/README.md +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_download_guide.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_examples.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_tq_ready_gguf.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/horus_transformers_features.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/local_models.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/neuralnode_v21_complete_demo.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/openclaw_demo.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/shade_model_with_tools.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/telegram_bot_demo.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/thinking_mode_example.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/tts_demo.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/turboquant_example.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/v3_features.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/examples/whatsapp_bot_demo.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/horus_chat_voice.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/neuralnode_horus_replica_telegram.ipynb +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/publish.bat +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/publish.sh +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/requirements_shade.txt +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/scripts/setup.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/debug_import.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/agents/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/chains/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/config/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/core/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/core/openai_blocker.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/diagnostics/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/discord.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/openclaw.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/slack.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/telegram.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/README.md +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/core-development.mdc +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/cursor.json +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/project-context.mdc +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/controller-rules.mdc +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/dto-rules.mdc +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/guard-rules.mdc +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/integration-channel-rules.mdc +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/integration-chatbot-rules.mdc +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/integration-event-rules.mdc +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/integration-storage-rules.mdc +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/route-rules.mdc +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/service-rules.mdc +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/type-rules.mdc +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/util-rules.mdc +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.cursor/rules/specialized-rules/validate-rules.mdc +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.dockerignore +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.env.example +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.eslintignore +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.eslintrc.js +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.gitignore +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.gitmodules +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.husky/README.md +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.husky/commit-msg +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.husky/pre-commit +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.husky/pre-push +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.prettierrc.js +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/.vscode/settings.json +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/AGENTS.md +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/CHANGELOG.md +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/CLAUDE.md +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/CONTRIBUTING.md +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/Docker/kafka/docker-compose.yaml +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/Docker/minio/docker-compose.yaml +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/Docker/mysql/docker-compose.yaml +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/Docker/postgres/docker-compose.yaml +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/Docker/rabbitmq/docker-compose.yaml +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/Docker/redis/docker-compose.yaml +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/Docker/scripts/deploy_database.sh +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/Docker/scripts/env_functions.sh +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/Docker/scripts/generate_database.sh +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/Docker/swarm/evolution_api_v2.yaml +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/Dockerfile +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/Dockerfile.metrics +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/Extras/chatwoot/configurar_admin.json +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/Extras/chatwoot/criador_de_empresas.json +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/Extras/chatwoot/criador_de_inbox.json +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/LICENSE +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/NOTICE +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/README.md +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/SECURITY.md +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/TRADEMARKS.md +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/commitlint.config.js +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/docker-compose.dev.yaml +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/docker-compose.yaml +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/env.example +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/grafana-dashboard.json.example +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/local_install.sh +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/manager/dist/assets/images/evolution-logo.png +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/manager/dist/assets/index-CO3NSIFj.js +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/manager/dist/assets/index-DsIrum0U.css +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/manager/dist/index.html +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/manager_install.sh +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/package-lock.json +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/package.json +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20240809105427_init/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20240813153900_add_unique_index_for_remoted_jid_and_instance_in_contacts/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20240814173138_add_ignore_jids_chatwoot/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20240814214314_integrations_unification/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20240821203259_add_postgres_migrations/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20240824162012_add_type_on_integration_sessions/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20240825131301_change_to_evolution_bot/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20241001172800_add_message_status/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20241108101333_fix_message_status_as_string/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20250214181954_add_wavoip_token_column/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20250225180031_add_nats_integration/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20250510035200_add_wavoip_token_to_settings_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20250514232744_add_n8n_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20250515211815_add_evoai_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20250516012152_remove_unique_atribute_for_file_name_in_media/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20250612155048_add_coluns_trypebot_tables/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20250613143000_add_lid_column_to_is_onwhatsapp/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/20250918183910_add_kafka_integration/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-migrations/migration_lock.toml +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/mysql-schema.prisma +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240609181238_init/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240610144159_create_column_profile_name_instance/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240611125754_create_columns_whitelabel_chatwoot/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240611202817_create_columns_debounce_time_typebot/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240712144948_add_business_id_column_to_instances/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240712150256_create_templates_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240712155950_adjusts_in_templates_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240712162206_remove_templates_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240712223655_column_fallback_typebot/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240712230631_column_ignore_jids_typebot/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240713184337_add_media_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240718121437_add_openai_tables/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240718123923_adjusts_openai_tables/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240722173259_add_name_column_to_openai_creds/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240722173518_add_name_column_to_openai_creds/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240723152648_adjusts_in_column_openai_creds/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240723200254_add_webhookurl_on_message/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240725184147_create_template_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240725202651_add_webhook_url_template_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240725221646_modify_token_instance_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240729115127_modify_trigger_type_openai_typebot_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240729180347_modify_typebot_session_status_openai_typebot_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240730152156_create_dify_tables/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240801193907_add_column_speech_to_text_openai_setting_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240803163908_add_column_description_on_integrations_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240808210239_add_column_function_url_openaibot_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240811021156_add_chat_name_column/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240811183328_add_unique_index_for_remoted_jid_and_instance_in_contacts/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240813003116_make_label_unique_for_instance/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240814173033_add_ignore_jids_chatwoot/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240814202359_integrations_unification/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240817110155_add_trigger_type_advanced/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240819154941_add_context_to_integration_session/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240821120816_bot_id_integration_session/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240821171327_add_generic_bot_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240821194524_add_flowise_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240824161333_add_type_on_integration_sessions/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240825130616_change_to_evolution_bot/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240828140837_add_is_on_whatsapp_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240828141556_remove_name_column_from_on_whatsapp_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240830193533_changed_table_case/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20240906202019_add_headers_on_webhook_config/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20241001180457_add_message_status/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20241006130306_alter_status_on_message_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20241007164026_add_unread_messages_on_chat_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20241011085129_create_pusher_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20241011100803_split_messages_and_time_per_char_integrations/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20241017144950_create_index/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20250116001415_add_wavoip_token_to_settings_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20250225180031_add_nats_integration/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20250514232744_add_n8n_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20250515211815_add_evoai_table/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20250516012152_remove_unique_atribute_for_file_name_in_media/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20250612155048_add_coluns_trypebot_tables/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20250613143000_add_lid_column_to_is_onwhatsapp/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20250918182355_add_kafka_integration/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/20251122003044_add_chat_instance_remotejid_unique/migration.sql +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-migrations/migration_lock.toml +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/postgresql-schema.prisma +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prisma/psql_bouncer-schema.prisma +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/prometheus.yml.example +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/public/hover-evolution.png +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/public/images/atendai-logo.png +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/public/images/bmc_qr.png +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/public/images/code.png +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/public/images/cover.png +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/public/images/evolution-logo.png +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/public/images/evolution-pro.png +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/public/images/picpay-image.png +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/public/images/picpay-qr.jpeg +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/public/images/qrcode-pix.png +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/public/images/video-cover.png +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/runWithProvider.js +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/@types/express.d.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/abstract/abstract.cache.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/abstract/abstract.repository.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/abstract/abstract.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/controllers/business.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/controllers/call.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/controllers/chat.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/controllers/group.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/controllers/instance.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/controllers/label.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/controllers/proxy.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/controllers/sendMessage.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/controllers/settings.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/controllers/template.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/dto/business.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/dto/call.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/dto/chat.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/dto/chatbot.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/dto/group.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/dto/instance.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/dto/label.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/dto/proxy.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/dto/sendMessage.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/dto/settings.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/dto/template.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/guards/auth.guard.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/guards/instance.guard.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/guards/telemetry.guard.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/channel/channel.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/channel/channel.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/channel/evolution/evolution.channel.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/channel/evolution/evolution.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/channel/evolution/evolution.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/channel/meta/meta.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/channel/meta/meta.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/channel/meta/whatsapp.business.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/channel/whatsapp/baileys.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/channel/whatsapp/baileys.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/channel/whatsapp/baileysMessage.processor.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/channel/whatsapp/voiceCalls/transport.type.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/channel/whatsapp/voiceCalls/useVoiceCallsBaileys.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/base-chatbot.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/base-chatbot.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/base-chatbot.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/chatbot.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/chatbot.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/chatbot.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/chatwoot/controllers/chatwoot.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/chatwoot/dto/chatwoot.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/chatwoot/libs/postgres.client.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/chatwoot/routes/chatwoot.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/chatwoot/services/chatwoot.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/chatwoot/utils/chatwoot-import-helper.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/chatwoot/validate/chatwoot.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/dify/controllers/dify.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/dify/dto/dify.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/dify/routes/dify.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/dify/services/dify.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/dify/validate/dify.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/evoai/controllers/evoai.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/evoai/dto/evoai.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/evoai/routes/evoai.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/evoai/services/evoai.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/evoai/validate/evoai.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/evolutionBot/controllers/evolutionBot.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/evolutionBot/dto/evolutionBot.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/evolutionBot/routes/evolutionBot.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/evolutionBot/services/evolutionBot.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/evolutionBot/validate/evolutionBot.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/flowise/controllers/flowise.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/flowise/dto/flowise.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/flowise/routes/flowise.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/flowise/services/flowise.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/flowise/validate/flowise.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/n8n/controllers/n8n.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/n8n/dto/n8n.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/n8n/routes/n8n.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/n8n/services/n8n.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/n8n/validate/n8n.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/openai/controllers/openai.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/openai/dto/openai.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/openai/routes/openai.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/openai/services/openai.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/openai/validate/openai.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/typebot/controllers/typebot.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/typebot/dto/typebot.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/typebot/routes/typebot.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/typebot/services/typebot.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/chatbot/typebot/validate/typebot.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/event.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/event.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/event.manager.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/event.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/event.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/kafka/kafka.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/kafka/kafka.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/kafka/kafka.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/nats/nats.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/nats/nats.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/pusher/pusher.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/pusher/pusher.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/pusher/pusher.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/rabbitmq/rabbitmq.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/rabbitmq/rabbitmq.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/sqs/sqs.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/sqs/sqs.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/webhook/webhook.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/webhook/webhook.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/webhook/webhook.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/websocket/websocket.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/event/websocket/websocket.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/integration.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/storage/s3/controllers/s3.controller.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/storage/s3/dto/media.dto.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/storage/s3/libs/minio.server.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/storage/s3/routes/s3.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/storage/s3/services/s3.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/storage/s3/validate/s3.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/integrations/storage/storage.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/provider/sessions.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/repository/repository.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/routes/business.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/routes/call.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/routes/chat.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/routes/group.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/routes/index.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/routes/instance.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/routes/label.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/routes/proxy.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/routes/sendMessage.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/routes/settings.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/routes/template.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/routes/view.router.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/server.module.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/services/auth.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/services/cache.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/services/channel.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/services/monitor.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/services/proxy.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/services/settings.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/services/template.service.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/api/types/wa.types.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/cache/cacheengine.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/cache/localcache.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/cache/rediscache.client.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/cache/rediscache.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/config/env.config.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/config/error.config.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/config/event.config.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/config/logger.config.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/config/path.config.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/exceptions/400.exception.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/exceptions/401.exception.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/exceptions/403.exception.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/exceptions/404.exception.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/exceptions/500.exception.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/exceptions/index.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/main.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/railway.json +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/advancedOperatorsSearch.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/createJid.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/errorResponse.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/fetchLatestWaWebVersion.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/findBotByTrigger.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/getConversationMessage.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/i18n.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/instrumentSentry.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/makeProxyAgent.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/onWhatsappCache.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/renderStatus.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/sendTelemetry.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/server-up.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/translations/en.json +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/translations/es.json +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/translations/pt-BR.json +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/use-multi-file-auth-state-prisma.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/use-multi-file-auth-state-provider-files.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/utils/use-multi-file-auth-state-redis-db.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/validate/business.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/validate/chat.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/validate/group.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/validate/instance.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/validate/label.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/validate/message.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/validate/proxy.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/validate/settings.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/validate/template.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/validate/templateDelete.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/validate/templateEdit.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/src/validate/validate.schema.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/tsconfig.json +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution-api/tsup.config.ts +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp/evolution_rebrander.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/integrations/whatsapp.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/memory/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/memory/advanced.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/prompts/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/base.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/chat/ai21.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/chat/anthropic.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/chat/bedrock.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/chat/cohere.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/chat/deepseek.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/chat/fireworks.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/chat/google.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/chat/groq.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/chat/mistral.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/chat/openai.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/chat/perplexity.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/chat/together.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/chat/vertex.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/embeddings.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/local/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/local_providers.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/text_generation.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/providers/universal_local.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/rag/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/reasoning/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/replica.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/speech/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/thinking.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/tools/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/tools/advanced.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/tools/multisearch.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/tools/system/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/tools/system/operations.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/tools/web/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/tts/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/turboquant.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/utils/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/utils/dependencies.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/utils/logger.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/utils/metrics.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/vectorstores/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/neuralnode/vision/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/src/nn/__init__.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/tests/test_openclaw.py +0 -0
- {neuralnode-2.2.4 → neuralnode-2.2.6}/tests/test_refactoring.py +0 -0
|
@@ -15,6 +15,10 @@ GOOGLE_API_KEY=your-google-api-key-here
|
|
|
15
15
|
# No API key needed, just ensure Ollama is running
|
|
16
16
|
OLLAMA_BASE_URL=http://localhost:11434
|
|
17
17
|
|
|
18
|
+
# Horus Cyper Nano 1.0 BETA Early Access
|
|
19
|
+
HORUS_CYPER_NANO_API_KEY=horusNN-your-access-token
|
|
20
|
+
HORUS_CYPER_NANO_BASE_URL=https://api.tokenai.llc/v1
|
|
21
|
+
|
|
18
22
|
# NeuralNode Settings
|
|
19
23
|
NEURALNODE_DEFAULT_PROVIDER=auto
|
|
20
24
|
NEURALNODE_MEMORY_ENABLED=true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: neuralnode
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.6
|
|
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
|
|
@@ -220,7 +220,34 @@ print(ai.chat("Hello from NeuralNode"))
|
|
|
220
220
|
|
|
221
221
|
## Horus
|
|
222
222
|
|
|
223
|
-
|
|
223
|
+
### Horus Cyper Nano 1.0 BETA Early Access API
|
|
224
|
+
|
|
225
|
+
Approved Early Access users can call the hosted model through the same
|
|
226
|
+
`NeuralNode` interface. Each Access Token has its own server-enforced RPM limit,
|
|
227
|
+
and API conversations are retained by TokenAI under the Early Access terms.
|
|
228
|
+
|
|
229
|
+
```python
|
|
230
|
+
import neuralnode as nn
|
|
231
|
+
|
|
232
|
+
ai = nn.NeuralNode(
|
|
233
|
+
provider="horus-cyper-nano",
|
|
234
|
+
model="horus-cyper-nano-1.0-beta",
|
|
235
|
+
api_key="horusNN-XXXXXXXXXXXXXXXX",
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
print(ai.chat("Review this code for defensive cybersecurity issues."))
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
The client reads `HORUS_CYPER_NANO_API_KEY` automatically. Override
|
|
242
|
+
`HORUS_CYPER_NANO_BASE_URL` only when TokenAI provides a different API endpoint.
|
|
243
|
+
The production API base URL is `https://api.tokenai.llc/v1`. Agent Mode supports
|
|
244
|
+
function tools, required or named tool choices, tool-result messages, and
|
|
245
|
+
buffered SSE compatibility streams. The hosted Early Access model has a 32,768
|
|
246
|
+
token context. See `examples/horus_cyper_nano_agent_mode.py` for the complete
|
|
247
|
+
tool-call round trip. NeuralNode retries temporary HTTP 429, 502, and 503
|
|
248
|
+
responses up to two times by default and respects the API Retry-After header.
|
|
249
|
+
|
|
250
|
+
Locally loaded Horus models use:
|
|
224
251
|
- unified chat template: `horus_unified`
|
|
225
252
|
- unified context window: `8192`
|
|
226
253
|
|
|
@@ -40,7 +40,34 @@ print(ai.chat("Hello from NeuralNode"))
|
|
|
40
40
|
|
|
41
41
|
## Horus
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
### Horus Cyper Nano 1.0 BETA Early Access API
|
|
44
|
+
|
|
45
|
+
Approved Early Access users can call the hosted model through the same
|
|
46
|
+
`NeuralNode` interface. Each Access Token has its own server-enforced RPM limit,
|
|
47
|
+
and API conversations are retained by TokenAI under the Early Access terms.
|
|
48
|
+
|
|
49
|
+
```python
|
|
50
|
+
import neuralnode as nn
|
|
51
|
+
|
|
52
|
+
ai = nn.NeuralNode(
|
|
53
|
+
provider="horus-cyper-nano",
|
|
54
|
+
model="horus-cyper-nano-1.0-beta",
|
|
55
|
+
api_key="horusNN-XXXXXXXXXXXXXXXX",
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
print(ai.chat("Review this code for defensive cybersecurity issues."))
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
The client reads `HORUS_CYPER_NANO_API_KEY` automatically. Override
|
|
62
|
+
`HORUS_CYPER_NANO_BASE_URL` only when TokenAI provides a different API endpoint.
|
|
63
|
+
The production API base URL is `https://api.tokenai.llc/v1`. Agent Mode supports
|
|
64
|
+
function tools, required or named tool choices, tool-result messages, and
|
|
65
|
+
buffered SSE compatibility streams. The hosted Early Access model has a 32,768
|
|
66
|
+
token context. See `examples/horus_cyper_nano_agent_mode.py` for the complete
|
|
67
|
+
tool-call round trip. NeuralNode retries temporary HTTP 429, 502, and 503
|
|
68
|
+
responses up to two times by default and respects the API Retry-After header.
|
|
69
|
+
|
|
70
|
+
Locally loaded Horus models use:
|
|
44
71
|
- unified chat template: `horus_unified`
|
|
45
72
|
- unified context window: `8192`
|
|
46
73
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
BEGIN;
|
|
2
|
+
|
|
3
|
+
ALTER TABLE api_conversations
|
|
4
|
+
DROP CONSTRAINT IF EXISTS api_conversations_special_request_id_fkey;
|
|
5
|
+
|
|
6
|
+
ALTER TABLE api_usage_events
|
|
7
|
+
DROP CONSTRAINT IF EXISTS api_usage_events_special_request_id_fkey;
|
|
8
|
+
|
|
9
|
+
DO $$
|
|
10
|
+
BEGIN
|
|
11
|
+
IF EXISTS (
|
|
12
|
+
SELECT 1
|
|
13
|
+
FROM api_keys
|
|
14
|
+
GROUP BY special_request_id
|
|
15
|
+
HAVING count(*) > 1
|
|
16
|
+
) THEN
|
|
17
|
+
RAISE EXCEPTION 'Cannot enforce one Access Token per user while duplicate API keys exist.';
|
|
18
|
+
END IF;
|
|
19
|
+
END
|
|
20
|
+
$$;
|
|
21
|
+
|
|
22
|
+
CREATE UNIQUE INDEX IF NOT EXISTS api_keys_one_per_user_idx
|
|
23
|
+
ON api_keys (special_request_id);
|
|
24
|
+
|
|
25
|
+
CREATE TABLE IF NOT EXISTS api_request_rate_events (
|
|
26
|
+
id BIGSERIAL PRIMARY KEY,
|
|
27
|
+
api_key_id BIGINT NOT NULL REFERENCES api_keys(id) ON DELETE CASCADE,
|
|
28
|
+
special_request_id TEXT NOT NULL,
|
|
29
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
CREATE INDEX IF NOT EXISTS api_request_rate_events_key_time_idx
|
|
33
|
+
ON api_request_rate_events (api_key_id, created_at DESC);
|
|
34
|
+
|
|
35
|
+
COMMIT;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
BEGIN;
|
|
2
|
+
|
|
3
|
+
ALTER TABLE api_keys
|
|
4
|
+
ADD COLUMN IF NOT EXISTS key_ciphertext TEXT,
|
|
5
|
+
ADD COLUMN IF NOT EXISTS metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
6
|
+
ADD COLUMN IF NOT EXISTS expires_at TIMESTAMPTZ;
|
|
7
|
+
|
|
8
|
+
DO $$
|
|
9
|
+
BEGIN
|
|
10
|
+
IF NOT EXISTS (
|
|
11
|
+
SELECT 1 FROM pg_constraint WHERE conname = 'api_keys_rpm_limit_check'
|
|
12
|
+
) THEN
|
|
13
|
+
ALTER TABLE api_keys
|
|
14
|
+
ADD CONSTRAINT api_keys_rpm_limit_check CHECK (rpm_limit BETWEEN 1 AND 600);
|
|
15
|
+
END IF;
|
|
16
|
+
|
|
17
|
+
IF NOT EXISTS (
|
|
18
|
+
SELECT 1 FROM pg_constraint WHERE conname = 'access_requests_rpm_limit_check'
|
|
19
|
+
) THEN
|
|
20
|
+
ALTER TABLE access_requests
|
|
21
|
+
ADD CONSTRAINT access_requests_rpm_limit_check CHECK (rpm_limit BETWEEN 1 AND 600);
|
|
22
|
+
END IF;
|
|
23
|
+
END
|
|
24
|
+
$$;
|
|
25
|
+
|
|
26
|
+
CREATE TABLE IF NOT EXISTS public_request_rate_events (
|
|
27
|
+
id BIGSERIAL PRIMARY KEY,
|
|
28
|
+
fingerprint TEXT NOT NULL,
|
|
29
|
+
event_type TEXT NOT NULL,
|
|
30
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
CREATE INDEX IF NOT EXISTS public_request_rate_events_lookup_idx
|
|
34
|
+
ON public_request_rate_events (fingerprint, event_type, created_at DESC);
|
|
35
|
+
|
|
36
|
+
CREATE TABLE IF NOT EXISTS api_inflight_requests (
|
|
37
|
+
id UUID PRIMARY KEY,
|
|
38
|
+
api_key_id BIGINT NOT NULL REFERENCES api_keys(id) ON DELETE CASCADE,
|
|
39
|
+
expires_at TIMESTAMPTZ NOT NULL,
|
|
40
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
CREATE INDEX IF NOT EXISTS api_inflight_requests_key_expiry_idx
|
|
44
|
+
ON api_inflight_requests (api_key_id, expires_at);
|
|
45
|
+
|
|
46
|
+
COMMIT;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
BEGIN;
|
|
2
|
+
|
|
3
|
+
ALTER TABLE api_keys
|
|
4
|
+
ADD COLUMN IF NOT EXISTS safety_strikes INTEGER NOT NULL DEFAULT 0,
|
|
5
|
+
ADD COLUMN IF NOT EXISTS disabled_reason TEXT;
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS inference_queue_leases (
|
|
8
|
+
id UUID PRIMARY KEY,
|
|
9
|
+
request_id TEXT NOT NULL UNIQUE,
|
|
10
|
+
api_key_id BIGINT NOT NULL REFERENCES api_keys(id) ON DELETE CASCADE,
|
|
11
|
+
special_request_id TEXT NOT NULL,
|
|
12
|
+
status TEXT NOT NULL CHECK (status IN ('waiting', 'running')),
|
|
13
|
+
queued_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
14
|
+
started_at TIMESTAMPTZ,
|
|
15
|
+
expires_at TIMESTAMPTZ NOT NULL
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
CREATE INDEX IF NOT EXISTS inference_queue_leases_status_time_idx
|
|
19
|
+
ON inference_queue_leases (status, queued_at, expires_at);
|
|
20
|
+
|
|
21
|
+
CREATE TABLE IF NOT EXISTS api_safety_events (
|
|
22
|
+
id BIGSERIAL PRIMARY KEY,
|
|
23
|
+
api_key_id BIGINT REFERENCES api_keys(id) ON DELETE SET NULL,
|
|
24
|
+
special_request_id TEXT NOT NULL,
|
|
25
|
+
request_id TEXT NOT NULL,
|
|
26
|
+
conversation_id UUID,
|
|
27
|
+
severity TEXT NOT NULL CHECK (severity IN ('low', 'medium', 'high', 'critical')),
|
|
28
|
+
action TEXT NOT NULL CHECK (action IN ('observed', 'blocked', 'token_disabled')),
|
|
29
|
+
categories TEXT[] NOT NULL DEFAULT '{}',
|
|
30
|
+
matched_rules TEXT[] NOT NULL DEFAULT '{}',
|
|
31
|
+
content_sha256 TEXT NOT NULL,
|
|
32
|
+
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
33
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
CREATE INDEX IF NOT EXISTS api_safety_events_request_time_idx
|
|
37
|
+
ON api_safety_events (special_request_id, created_at DESC);
|
|
38
|
+
|
|
39
|
+
COMMIT;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
FROM node:22-alpine
|
|
2
|
+
|
|
3
|
+
WORKDIR /app
|
|
4
|
+
COPY package*.json ./
|
|
5
|
+
RUN npm ci --omit=dev
|
|
6
|
+
COPY --chown=node:node *.js ./
|
|
7
|
+
COPY --chown=node:node *.sh ./
|
|
8
|
+
COPY --chown=node:node assets ./assets
|
|
9
|
+
RUN chmod 755 ./*.sh
|
|
10
|
+
|
|
11
|
+
USER node
|
|
12
|
+
|
|
13
|
+
EXPOSE 8080
|
|
14
|
+
CMD ["node", "server.js"]
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Horus Cyper Nano Early Access Gateway
|
|
2
|
+
|
|
3
|
+
This module is installed beside the existing TokenAI Early Access API on AWS.
|
|
4
|
+
It reuses the existing Access Token authentication and PostgreSQL pool. The
|
|
5
|
+
deployed API entrypoint is mirrored in `server.production.js`.
|
|
6
|
+
|
|
7
|
+
The public API contract is:
|
|
8
|
+
|
|
9
|
+
- `GET /v1/access`
|
|
10
|
+
- `GET /v1/models`
|
|
11
|
+
- `POST /v1/chat/completions`
|
|
12
|
+
|
|
13
|
+
Production guarantees:
|
|
14
|
+
|
|
15
|
+
- One active Access Token may exist for each Early Access user.
|
|
16
|
+
- Accepted requests are limited by the per-key RPM value stored in PostgreSQL.
|
|
17
|
+
- Every successful completion stores the customer messages and matching model
|
|
18
|
+
response in the same conversation record.
|
|
19
|
+
- Agent Mode accepts function tools, tool choices, assistant tool calls, tool
|
|
20
|
+
results, and buffered SSE responses while retaining the complete interaction.
|
|
21
|
+
- Production inference uses two CUDA workers with a 32,768-token context. The
|
|
22
|
+
public base URL is `https://api.tokenai.llc/v1`.
|
|
23
|
+
- A PostgreSQL-backed FIFO queue limits global model concurrency to two running
|
|
24
|
+
requests. A full queue returns HTTP 503 with `Retry-After` instead of
|
|
25
|
+
overloading the GPU workers.
|
|
26
|
+
- High-confidence malicious cybersecurity or model-extraction requests are
|
|
27
|
+
blocked, audited, and permanently disable the offending Access Token.
|
|
28
|
+
- Raw role markers and duplicate output are rejected and retried against the
|
|
29
|
+
alternate worker before the gateway fails closed.
|
|
30
|
+
- Deleting a user removes their application, email, token, and personal data so
|
|
31
|
+
the email can register again. Conversation and usage audit records are kept
|
|
32
|
+
and shown as belonging to a deleted identity.
|
|
33
|
+
|
|
34
|
+
Database setup runs migrations `001` through `004`. They add the one-token
|
|
35
|
+
unique index, durable rate-limit events, encrypted Access Token recovery,
|
|
36
|
+
concurrency and queue leases, safety events, public endpoint throttling, and
|
|
37
|
+
audit-log retention behavior.
|
|
38
|
+
|
|
39
|
+
`tokenai-early-access-backup.timer` creates and validates a PostgreSQL custom
|
|
40
|
+
dump every day. The dump is encrypted with a unique AES-256 key, the AES key is
|
|
41
|
+
wrapped by an RSA public key, and the archive is copied to the model host. Only
|
|
42
|
+
the off-instance destination has the RSA private key. The receiver verifies the
|
|
43
|
+
checksum, decrypts the dump, and runs `pg_restore --list` before accepting it.
|
|
44
|
+
Local encrypted archives are retained for 14 days and off-instance archives for
|
|
45
|
+
30 days.
|
|
46
|
+
|
|
47
|
+
`docker-compose.aws.yml` mirrors the AWS deployment. The permanent named
|
|
48
|
+
Cloudflare Tunnel publishes only the private API origin. The edge Worker reaches
|
|
49
|
+
that origin through a Cloudflare VPC Service binding; no Quick Tunnel or public
|
|
50
|
+
origin address is used.
|
|
51
|
+
|
|
52
|
+
`tokenai-early-access-monitor.timer` checks the API, database, edge path, model
|
|
53
|
+
transport, both workers, queue state, GPU health, latency, disk usage, and backup
|
|
54
|
+
age every minute. Alert and recovery messages are delivered through the
|
|
55
|
+
configured TokenAI mailbox.
|
|
56
|
+
|
|
57
|
+
Required model-server configuration:
|
|
58
|
+
|
|
59
|
+
```dotenv
|
|
60
|
+
MODEL_UPSTREAM_URLS=http://model-worker-1/v1,http://model-worker-2/v1
|
|
61
|
+
MODEL_UPSTREAM_MODEL=deployed-model-id
|
|
62
|
+
MODEL_UPSTREAM_MODE=completion
|
|
63
|
+
MODEL_UPSTREAM_API_KEY=
|
|
64
|
+
MODEL_UPSTREAM_AUTH_HEADER=Authorization
|
|
65
|
+
MODEL_UPSTREAM_AUTH_SCHEME=Bearer
|
|
66
|
+
MODEL_UPSTREAM_TIMEOUT_MS=120000
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
`MODEL_UPSTREAM_URLS` accepts a comma-separated list of API base URLs or complete
|
|
70
|
+
`/chat/completions` endpoints. Requests are distributed in round-robin order and
|
|
71
|
+
retry another worker after a network error or an HTTP 5xx response. The singular
|
|
72
|
+
`MODEL_UPSTREAM_URL` remains supported for one-worker deployments. Until either
|
|
73
|
+
setting is configured, authenticated requests fail closed with HTTP 503 and are
|
|
74
|
+
recorded as failed usage events.
|
|
75
|
+
|
|
76
|
+
The current model transport is restricted to the Docker bridge address and uses
|
|
77
|
+
a pinned SSH host key. `../model-server/direct-vpc-cutover.md` contains the
|
|
78
|
+
single security-group rule required to replace that transport with direct VPC
|
|
79
|
+
traffic restricted to the Early Access API security group.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import crypto from "node:crypto"
|
|
2
|
+
import pg from "pg"
|
|
3
|
+
|
|
4
|
+
const { Pool } = pg
|
|
5
|
+
const pool = new Pool({ connectionString: process.env.DATABASE_URL, max: 2 })
|
|
6
|
+
const suffix = crypto.randomBytes(5).toString("hex").toUpperCase()
|
|
7
|
+
const specialRequestId = `HCN10-AGENT-${suffix}`
|
|
8
|
+
const apiKey = `horusNN-${crypto.randomBytes(12).toString("hex").slice(0, 16)}`
|
|
9
|
+
const keyPrefix = `${apiKey.slice(0, 12)}...`
|
|
10
|
+
const keyHash = crypto.createHash("sha256").update(`${apiKey}:${process.env.API_KEY_PEPPER}`).digest("hex")
|
|
11
|
+
const conversationId = crypto.randomUUID()
|
|
12
|
+
const apiBase = "http://127.0.0.1:18081"
|
|
13
|
+
|
|
14
|
+
async function request(payload) {
|
|
15
|
+
return fetch(`${apiBase}/v1/chat/completions`, {
|
|
16
|
+
method: "POST",
|
|
17
|
+
headers: {
|
|
18
|
+
Authorization: `Bearer ${apiKey}`,
|
|
19
|
+
"Content-Type": "application/json",
|
|
20
|
+
"X-Client-Name": "Agent Mode Self Test",
|
|
21
|
+
},
|
|
22
|
+
body: JSON.stringify({ model: "horus-cyper-nano-1.0-beta", max_tokens: 64, ...payload }),
|
|
23
|
+
})
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
let result = {}
|
|
27
|
+
try {
|
|
28
|
+
await pool.query(
|
|
29
|
+
`INSERT INTO access_requests (
|
|
30
|
+
special_request_id, first_name, second_name, full_name, company_name,
|
|
31
|
+
company_website, job, applicant_type, rpm_limit, business_mail,
|
|
32
|
+
linkedin_profile_url, github_profile_url, portfolio_url, country_or_region,
|
|
33
|
+
use_cases, responsible_use_accepted, responsible_use_accepted_at, status, source
|
|
34
|
+
) VALUES (
|
|
35
|
+
$1, 'Agent', 'Self Test', 'Agent Self Test', 'TokenAI',
|
|
36
|
+
'https://tokenai.llc', 'Integration test', 'developer_researcher', 10, $2,
|
|
37
|
+
'https://linkedin.com/in/tokenai-test', 'https://github.com/tokenai-test', '', 'Internal',
|
|
38
|
+
'Temporary automated Agent Mode verification.', true, now(), 'approved', 'agent-mode-self-test'
|
|
39
|
+
)`,
|
|
40
|
+
[specialRequestId, `agent-${suffix.toLowerCase()}@tokenai.llc`],
|
|
41
|
+
)
|
|
42
|
+
await pool.query(
|
|
43
|
+
`INSERT INTO api_keys (special_request_id, key_prefix, key_hash, rpm_limit)
|
|
44
|
+
VALUES ($1, $2, $3, 10)`,
|
|
45
|
+
[specialRequestId, keyPrefix, keyHash],
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
const firstResponse = await request({
|
|
49
|
+
conversation_id: conversationId,
|
|
50
|
+
messages: [{ role: "user", content: "Check the gateway status using the available tool." }],
|
|
51
|
+
tools: [{
|
|
52
|
+
type: "function",
|
|
53
|
+
function: {
|
|
54
|
+
name: "get_status",
|
|
55
|
+
description: "Read a service status.",
|
|
56
|
+
parameters: {
|
|
57
|
+
type: "object",
|
|
58
|
+
properties: { target: { type: "string" } },
|
|
59
|
+
required: ["target"],
|
|
60
|
+
additionalProperties: false,
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
}],
|
|
64
|
+
tool_choice: "required",
|
|
65
|
+
})
|
|
66
|
+
const firstBody = await firstResponse.json()
|
|
67
|
+
const toolCall = firstBody.choices?.[0]?.message?.tool_calls?.[0]
|
|
68
|
+
|
|
69
|
+
if (!toolCall) {
|
|
70
|
+
throw new Error(`The model did not return a required tool call: ${JSON.stringify(firstBody).slice(0, 1000)}`)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const secondResponse = await request({
|
|
74
|
+
conversation_id: conversationId,
|
|
75
|
+
messages: [
|
|
76
|
+
{ role: "user", content: "Check the gateway status using the available tool." },
|
|
77
|
+
{ role: "assistant", content: null, tool_calls: [toolCall] },
|
|
78
|
+
{ role: "tool", tool_call_id: toolCall.id, content: '{"status":"healthy"}' },
|
|
79
|
+
],
|
|
80
|
+
})
|
|
81
|
+
const secondBody = await secondResponse.json()
|
|
82
|
+
|
|
83
|
+
const streamResponse = await request({
|
|
84
|
+
messages: [{ role: "user", content: "Return a short compatibility response." }],
|
|
85
|
+
stream: true,
|
|
86
|
+
})
|
|
87
|
+
const streamBody = await streamResponse.text()
|
|
88
|
+
|
|
89
|
+
const stored = await pool.query(
|
|
90
|
+
`SELECT
|
|
91
|
+
count(*)::int AS total_messages,
|
|
92
|
+
count(*) FILTER (WHERE role = 'tool')::int AS tool_messages,
|
|
93
|
+
count(*) FILTER (WHERE cm.role = 'assistant' AND cm.metadata ? 'toolCalls')::int AS tool_call_messages
|
|
94
|
+
FROM conversation_messages cm
|
|
95
|
+
JOIN api_conversations ac ON ac.id = cm.conversation_id
|
|
96
|
+
WHERE ac.special_request_id = $1`,
|
|
97
|
+
[specialRequestId],
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
result = {
|
|
101
|
+
toolRequestStatus: firstResponse.status,
|
|
102
|
+
toolCallName: toolCall?.function?.name,
|
|
103
|
+
toolResultStatus: secondResponse.status,
|
|
104
|
+
finalContent: secondBody.choices?.[0]?.message?.content,
|
|
105
|
+
streamStatus: streamResponse.status,
|
|
106
|
+
streamContentType: streamResponse.headers.get("content-type"),
|
|
107
|
+
streamDone: streamBody.includes("data: [DONE]"),
|
|
108
|
+
stored: stored.rows[0],
|
|
109
|
+
}
|
|
110
|
+
} finally {
|
|
111
|
+
await pool.query("DELETE FROM access_requests WHERE special_request_id = $1", [specialRequestId])
|
|
112
|
+
await pool.query("DELETE FROM api_conversations WHERE special_request_id = $1", [specialRequestId])
|
|
113
|
+
await pool.query("DELETE FROM api_usage_events WHERE special_request_id = $1", [specialRequestId])
|
|
114
|
+
await pool.end()
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
console.log(JSON.stringify(result))
|
|
Binary file
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
set -eu
|
|
3
|
+
|
|
4
|
+
backup_dir=${BACKUP_LOCAL_DIR:-/opt/tokenai-early-access/backups}
|
|
5
|
+
remote_host=${BACKUP_REMOTE_HOST:-54.91.40.201}
|
|
6
|
+
remote_user=${BACKUP_REMOTE_USER:-ec2-user}
|
|
7
|
+
remote_key=${BACKUP_REMOTE_SSH_KEY:-/home/ec2-user/.ssh/horus_backup_transfer}
|
|
8
|
+
public_key=${BACKUP_ENCRYPTION_PUBLIC_KEY:-/opt/tokenai-early-access/backup_public.pem}
|
|
9
|
+
timestamp=$(date -u +%Y%m%dT%H%M%SZ)
|
|
10
|
+
name=early-access-$timestamp
|
|
11
|
+
work_dir=$(mktemp -d)
|
|
12
|
+
umask 077
|
|
13
|
+
|
|
14
|
+
cleanup() {
|
|
15
|
+
rm -rf "$work_dir"
|
|
16
|
+
}
|
|
17
|
+
trap cleanup EXIT INT TERM
|
|
18
|
+
|
|
19
|
+
mkdir -p "$backup_dir"
|
|
20
|
+
test -r "$remote_key"
|
|
21
|
+
test -r "$public_key"
|
|
22
|
+
|
|
23
|
+
docker exec tokenai-early-access-postgres-1 sh -lc \
|
|
24
|
+
'pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB" --format=custom --no-owner --no-privileges' \
|
|
25
|
+
> "$work_dir/$name.dump"
|
|
26
|
+
|
|
27
|
+
docker exec -i tokenai-early-access-postgres-1 pg_restore --list \
|
|
28
|
+
< "$work_dir/$name.dump" > /dev/null
|
|
29
|
+
|
|
30
|
+
openssl rand -base64 48 > "$work_dir/passphrase"
|
|
31
|
+
openssl enc -aes-256-cbc -pbkdf2 -iter 200000 -salt \
|
|
32
|
+
-in "$work_dir/$name.dump" \
|
|
33
|
+
-out "$work_dir/database.dump.enc" \
|
|
34
|
+
-pass file:"$work_dir/passphrase"
|
|
35
|
+
openssl pkeyutl -encrypt -pubin -inkey "$public_key" \
|
|
36
|
+
-in "$work_dir/passphrase" \
|
|
37
|
+
-out "$work_dir/passphrase.enc" \
|
|
38
|
+
-pkeyopt rsa_padding_mode:oaep \
|
|
39
|
+
-pkeyopt rsa_oaep_md:sha256
|
|
40
|
+
|
|
41
|
+
dump_sha=$(sha256sum "$work_dir/database.dump.enc" | awk '{print $1}')
|
|
42
|
+
key_sha=$(sha256sum "$work_dir/passphrase.enc" | awk '{print $1}')
|
|
43
|
+
cat > "$work_dir/manifest.txt" <<EOF
|
|
44
|
+
format=tokenai-early-access-backup-v1
|
|
45
|
+
created_at=$timestamp
|
|
46
|
+
database_cipher_sha256=$dump_sha
|
|
47
|
+
wrapped_key_sha256=$key_sha
|
|
48
|
+
encryption=aes-256-cbc-pbkdf2-200000+rsa-oaep-sha256
|
|
49
|
+
EOF
|
|
50
|
+
|
|
51
|
+
tar -C "$work_dir" -czf "$backup_dir/$name.tar.gz" database.dump.enc passphrase.enc manifest.txt
|
|
52
|
+
archive_sha=$(sha256sum "$backup_dir/$name.tar.gz" | awk '{print $1}')
|
|
53
|
+
|
|
54
|
+
ssh -o BatchMode=yes -o StrictHostKeyChecking=yes -o UserKnownHostsFile=/home/ec2-user/.ssh/known_hosts -i "$remote_key" \
|
|
55
|
+
"$remote_user@$remote_host" "upload $name.tar.gz $archive_sha" \
|
|
56
|
+
< "$backup_dir/$name.tar.gz"
|
|
57
|
+
ssh -o BatchMode=yes -o StrictHostKeyChecking=yes -o UserKnownHostsFile=/home/ec2-user/.ssh/known_hosts -i "$remote_key" \
|
|
58
|
+
"$remote_user@$remote_host" "verify $name.tar.gz"
|
|
59
|
+
|
|
60
|
+
find "$backup_dir" -type f -name 'early-access-*.tar.gz' -mtime +14 -delete
|
|
61
|
+
find "$backup_dir" -type f -name 'early-access-*.dump' -delete
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
services:
|
|
2
|
+
postgres:
|
|
3
|
+
image: postgres:16-alpine
|
|
4
|
+
restart: unless-stopped
|
|
5
|
+
environment:
|
|
6
|
+
POSTGRES_DB: ${POSTGRES_DB}
|
|
7
|
+
POSTGRES_USER: ${POSTGRES_USER}
|
|
8
|
+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
|
9
|
+
volumes:
|
|
10
|
+
- postgres_data:/var/lib/postgresql/data
|
|
11
|
+
- ./db/init.sql:/docker-entrypoint-initdb.d/001-init.sql:ro
|
|
12
|
+
- ./db/002-retention-rate-limits.sql:/docker-entrypoint-initdb.d/002-retention-rate-limits.sql:ro
|
|
13
|
+
- ./db/003-security-hardening.sql:/docker-entrypoint-initdb.d/003-security-hardening.sql:ro
|
|
14
|
+
- ./db/004-production-readiness.sql:/docker-entrypoint-initdb.d/004-production-readiness.sql:ro
|
|
15
|
+
healthcheck:
|
|
16
|
+
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
|
|
17
|
+
interval: 10s
|
|
18
|
+
timeout: 5s
|
|
19
|
+
retries: 5
|
|
20
|
+
|
|
21
|
+
api:
|
|
22
|
+
build:
|
|
23
|
+
context: ./api
|
|
24
|
+
image: tokenai-early-access-api:0.3.5
|
|
25
|
+
restart: unless-stopped
|
|
26
|
+
environment:
|
|
27
|
+
DATABASE_URL: ${DATABASE_URL}
|
|
28
|
+
PORT: ${PORT}
|
|
29
|
+
ADMIN_TOKEN: ${ADMIN_TOKEN}
|
|
30
|
+
API_KEY_PEPPER: ${API_KEY_PEPPER}
|
|
31
|
+
API_KEY_ENCRYPTION_KEY: ${API_KEY_ENCRYPTION_KEY}
|
|
32
|
+
TOKENAI_ALLOWED_ORIGINS: ${TOKENAI_ALLOWED_ORIGINS}
|
|
33
|
+
SMTP_HOST: ${SMTP_HOST}
|
|
34
|
+
SMTP_PORT: ${SMTP_PORT}
|
|
35
|
+
SMTP_SECURE: ${SMTP_SECURE}
|
|
36
|
+
SMTP_USER: ${SMTP_USER}
|
|
37
|
+
SMTP_PASS: ${SMTP_PASS}
|
|
38
|
+
SMTP_FROM_EMAIL: ${SMTP_FROM_EMAIL}
|
|
39
|
+
SMTP_FROM_NAME: ${SMTP_FROM_NAME}
|
|
40
|
+
REPLY_TO_EMAIL: ${REPLY_TO_EMAIL}
|
|
41
|
+
MODEL_UPSTREAM_URL: ${MODEL_UPSTREAM_URL:-}
|
|
42
|
+
MODEL_UPSTREAM_URLS: ${MODEL_UPSTREAM_URLS:-}
|
|
43
|
+
MODEL_UPSTREAM_MODEL: ${MODEL_UPSTREAM_MODEL:-}
|
|
44
|
+
MODEL_UPSTREAM_MODE: ${MODEL_UPSTREAM_MODE:-chat}
|
|
45
|
+
MODEL_UPSTREAM_API_KEY: ${MODEL_UPSTREAM_API_KEY:-}
|
|
46
|
+
MODEL_UPSTREAM_AUTH_HEADER: ${MODEL_UPSTREAM_AUTH_HEADER:-Authorization}
|
|
47
|
+
MODEL_UPSTREAM_AUTH_SCHEME: ${MODEL_UPSTREAM_AUTH_SCHEME:-Bearer}
|
|
48
|
+
MODEL_UPSTREAM_TIMEOUT_MS: ${MODEL_UPSTREAM_TIMEOUT_MS:-120000}
|
|
49
|
+
MODEL_QUALITY_FAIL_CLOSED: ${MODEL_QUALITY_FAIL_CLOSED:-true}
|
|
50
|
+
GLOBAL_INFERENCE_CAPACITY: ${GLOBAL_INFERENCE_CAPACITY:-2}
|
|
51
|
+
GLOBAL_INFERENCE_MAX_QUEUE: ${GLOBAL_INFERENCE_MAX_QUEUE:-40}
|
|
52
|
+
GLOBAL_INFERENCE_QUEUE_TIMEOUT_MS: ${GLOBAL_INFERENCE_QUEUE_TIMEOUT_MS:-120000}
|
|
53
|
+
GLOBAL_INFERENCE_LEASE_SECONDS: ${GLOBAL_INFERENCE_LEASE_SECONDS:-240}
|
|
54
|
+
extra_hosts:
|
|
55
|
+
- "host.docker.internal:172.18.0.1"
|
|
56
|
+
ports:
|
|
57
|
+
- "127.0.0.1:8080:8080"
|
|
58
|
+
read_only: true
|
|
59
|
+
tmpfs:
|
|
60
|
+
- /tmp:size=16m,mode=1777
|
|
61
|
+
security_opt:
|
|
62
|
+
- no-new-privileges:true
|
|
63
|
+
cap_drop:
|
|
64
|
+
- ALL
|
|
65
|
+
healthcheck:
|
|
66
|
+
test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:8080/health').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"]
|
|
67
|
+
interval: 15s
|
|
68
|
+
timeout: 5s
|
|
69
|
+
retries: 5
|
|
70
|
+
depends_on:
|
|
71
|
+
postgres:
|
|
72
|
+
condition: service_healthy
|
|
73
|
+
|
|
74
|
+
cloudflared:
|
|
75
|
+
image: cloudflare/cloudflared:latest
|
|
76
|
+
restart: unless-stopped
|
|
77
|
+
command: tunnel --no-autoupdate run --token ${TUNNEL_TOKEN}
|
|
78
|
+
depends_on:
|
|
79
|
+
- api
|
|
80
|
+
read_only: true
|
|
81
|
+
security_opt:
|
|
82
|
+
- no-new-privileges:true
|
|
83
|
+
cap_drop:
|
|
84
|
+
- ALL
|
|
85
|
+
|
|
86
|
+
volumes:
|
|
87
|
+
postgres_data:
|
|
88
|
+
|
|
89
|
+
networks:
|
|
90
|
+
default:
|
|
91
|
+
ipam:
|
|
92
|
+
config:
|
|
93
|
+
- subnet: 172.18.0.0/16
|
|
94
|
+
gateway: 172.18.0.1
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import crypto from "node:crypto"
|
|
2
|
+
import pg from "pg"
|
|
3
|
+
|
|
4
|
+
const { Pool } = pg
|
|
5
|
+
|
|
6
|
+
const pool = new Pool({ connectionString: process.env.DATABASE_URL, max: 2 })
|
|
7
|
+
const suffix = crypto.randomBytes(5).toString("hex").toUpperCase()
|
|
8
|
+
const specialRequestId = `HCN10-INTEGRATION-${suffix}`
|
|
9
|
+
const tokenSuffix = crypto.randomBytes(12).toString("base64url").replace(/[^A-Za-z0-9]/g, "").slice(0, 16)
|
|
10
|
+
const apiKey = `horusNN-${tokenSuffix.padEnd(16, "A")}`
|
|
11
|
+
const keyPrefix = `${apiKey.slice(0, 12)}...`
|
|
12
|
+
const keyHash = crypto
|
|
13
|
+
.createHash("sha256")
|
|
14
|
+
.update(`${apiKey}:${process.env.API_KEY_PEPPER}`)
|
|
15
|
+
.digest("hex")
|
|
16
|
+
|
|
17
|
+
let result
|
|
18
|
+
try {
|
|
19
|
+
await pool.query(
|
|
20
|
+
`INSERT INTO access_requests (
|
|
21
|
+
special_request_id, first_name, second_name, full_name, company_name,
|
|
22
|
+
company_website, job, applicant_type, rpm_limit, business_mail,
|
|
23
|
+
linkedin_profile_url, github_profile_url, portfolio_url, country_or_region,
|
|
24
|
+
use_cases, responsible_use_accepted, responsible_use_accepted_at, status,
|
|
25
|
+
api_key_prefix, api_key_hash, source
|
|
26
|
+
) VALUES (
|
|
27
|
+
$1, 'Gateway', 'Self Test', 'Gateway Self Test', 'TokenAI',
|
|
28
|
+
'https://tokenai.llc', 'Integration test', 'developer_researcher', 20, $2,
|
|
29
|
+
'https://linkedin.com/in/tokenai-test', 'https://github.com/tokenai-test', '', 'Internal',
|
|
30
|
+
'Temporary automated gateway verification record.', true, now(), 'approved',
|
|
31
|
+
$3, $4, 'gateway-self-test'
|
|
32
|
+
)`,
|
|
33
|
+
[specialRequestId, `gateway-${suffix.toLowerCase()}@tokenai.llc`, keyPrefix, keyHash],
|
|
34
|
+
)
|
|
35
|
+
await pool.query(
|
|
36
|
+
`INSERT INTO api_keys (special_request_id, key_prefix, key_hash, rpm_limit)
|
|
37
|
+
VALUES ($1, $2, $3, 20)`,
|
|
38
|
+
[specialRequestId, keyPrefix, keyHash],
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
const accessResponse = await fetch("http://127.0.0.1:8080/v1/access", {
|
|
42
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
43
|
+
})
|
|
44
|
+
const accessBody = await accessResponse.json()
|
|
45
|
+
|
|
46
|
+
const chatResponse = await fetch("http://127.0.0.1:8080/v1/chat/completions", {
|
|
47
|
+
method: "POST",
|
|
48
|
+
headers: {
|
|
49
|
+
Authorization: `Bearer ${apiKey}`,
|
|
50
|
+
"Content-Type": "application/json",
|
|
51
|
+
"X-Client-Name": "NeuralNode Gateway Self Test",
|
|
52
|
+
},
|
|
53
|
+
body: JSON.stringify({
|
|
54
|
+
model: "horus-cyper-nano-1.0-beta",
|
|
55
|
+
messages: [{ role: "user", content: "Gateway storage verification message." }],
|
|
56
|
+
max_tokens: 32,
|
|
57
|
+
stream: false,
|
|
58
|
+
}),
|
|
59
|
+
})
|
|
60
|
+
const chatBody = await chatResponse.json()
|
|
61
|
+
|
|
62
|
+
const counts = await pool.query(
|
|
63
|
+
`SELECT
|
|
64
|
+
(SELECT count(*)::int FROM api_conversations WHERE special_request_id = $1) AS conversations,
|
|
65
|
+
(SELECT count(*)::int FROM conversation_messages cm
|
|
66
|
+
JOIN api_conversations ac ON ac.id = cm.conversation_id
|
|
67
|
+
WHERE ac.special_request_id = $1) AS messages,
|
|
68
|
+
(SELECT count(*)::int FROM api_usage_events WHERE special_request_id = $1) AS usage_events`,
|
|
69
|
+
[specialRequestId],
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
result = {
|
|
73
|
+
accessStatus: accessResponse.status,
|
|
74
|
+
accessRpmLimit: accessBody.rpm_limit,
|
|
75
|
+
chatStatus: chatResponse.status,
|
|
76
|
+
chatErrorCode: chatBody?.error?.code,
|
|
77
|
+
requestIdPresent: Boolean(chatBody.request_id),
|
|
78
|
+
conversationIdPresent: Boolean(chatBody.conversation_id),
|
|
79
|
+
assistantPreview: String(chatBody?.choices?.[0]?.message?.content || "").slice(0, 240),
|
|
80
|
+
stored: counts.rows[0],
|
|
81
|
+
}
|
|
82
|
+
} finally {
|
|
83
|
+
await pool.query("DELETE FROM access_requests WHERE special_request_id = $1", [specialRequestId])
|
|
84
|
+
const cleanup = await pool.query(
|
|
85
|
+
"SELECT count(*)::int AS remaining FROM access_requests WHERE special_request_id = $1",
|
|
86
|
+
[specialRequestId],
|
|
87
|
+
)
|
|
88
|
+
result = { ...(result || {}), cleanupRemaining: cleanup.rows[0].remaining }
|
|
89
|
+
await pool.end()
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
console.log(JSON.stringify(result))
|