Update Python version requirements and fix compatibility issues

- Bump minimum Python version from 3.11 to 3.13 across all apps
- Add Python 3.11-3.13 test matrix to CLI workflow
- Document Python 3.11+ requirement in .env.example
- Fix Starlette Broadcast removal with in-process fallback implementation
- Add _InProcessBroadcast class for tests when Starlette Broadcast is unavailable
- Refactor API key validators to read live settings instead of cached values
- Update database models with explicit
This commit is contained in:
oib
2026-02-24 18:41:08 +01:00
parent 24b3a37733
commit 825f157749
270 changed files with 66674 additions and 2027 deletions

View File

@@ -0,0 +1,38 @@
[Unit]
Description=AITBC Adaptive Learning Service (Port 8005)
Documentation=https://docs.aitbc.bubuit.net
After=network.target aitbc-coordinator-api.service
Wants=aitbc-coordinator-api.service
[Service]
Type=simple
User=aitbc
Group=aitbc
WorkingDirectory=/opt/aitbc/apps/coordinator-api
Environment=PYTHONPATH=/opt/aitbc/apps/coordinator-api/src
Environment=PORT=8005
Environment=SERVICE_TYPE=adaptive-learning
Environment=LEARNING_MODE=online
Environment=LOG_LEVEL=INFO
ExecStart=/opt/aitbc/.venv/bin/python -m aitbc_adaptive_learning.main
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=aitbc-adaptive-learning
# Security settings
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/aitbc/logs /opt/aitbc/data /opt/aitbc/models
LimitNOFILE=65536
# Resource limits
MemoryMax=3G
CPUQuota=250%
[Install]
WantedBy=multi-user.target

View File

@@ -1,5 +1,5 @@
[Unit]
Description=AITBC Coordinator API Service
Description=AITBC Coordinator API Service (Python 3.11+)
After=network.target
Wants=network.target
@@ -10,6 +10,8 @@ Group=oib
WorkingDirectory=/opt/coordinator-api
Environment=PATH=/opt/coordinator-api/.venv/bin
Environment=PYTHONPATH=/opt/coordinator-api/src
# Python version validation
ExecStartPre=/bin/bash -c "python3.11 --version || (echo 'Python 3.11+ required' && exit 1)"
ExecStart=/opt/coordinator-api/.venv/bin/python -m uvicorn app.main:app --host 0.0.0.0 --port 8000
ExecReload=/bin/kill -HUP $MAINPID
Restart=always

View File

@@ -1,5 +1,5 @@
[Unit]
Description=AITBC Exchange API Service
Description=AITBC Exchange API Service (Python 3.11+)
After=network.target
Wants=network.target
@@ -9,6 +9,8 @@ User=root
Group=root
WorkingDirectory=/opt/exchange-api
Environment=PATH=/opt/exchange-api/.venv/bin
# Python version validation
ExecStartPre=/bin/bash -c "python3.11 --version || (echo 'Python 3.11+ required' && exit 1)"
ExecStart=/opt/exchange-api/.venv/bin/python simple_exchange_api.py
ExecReload=/bin/kill -HUP $MAINPID
Restart=always

View File

@@ -0,0 +1,43 @@
[Unit]
Description=AITBC GPU Multi-Modal Service (Port 8003)
Documentation=https://docs.aitbc.bubuit.net
After=network.target aitbc-coordinator-api.service nvidia-persistenced.service
Wants=aitbc-coordinator-api.service
[Service]
Type=simple
User=aitbc
Group=aitbc
WorkingDirectory=/opt/aitbc/apps/coordinator-api
Environment=PYTHONPATH=/opt/aitbc/apps/coordinator-api/src
Environment=PORT=8003
Environment=SERVICE_TYPE=gpu-multimodal
Environment=GPU_ENABLED=true
Environment=CUDA_VISIBLE_DEVICES=0
Environment=LOG_LEVEL=INFO
ExecStart=/opt/aitbc/.venv/bin/python -m aitbc_gpu_multimodal.main
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=aitbc-gpu-multimodal
# Security settings
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/aitbc/logs /opt/aitbc/data /dev/nvidia*
LimitNOFILE=65536
# GPU access
DeviceAllow=/dev/nvidia*
DevicePolicy=auto
# Resource limits
MemoryMax=4G
CPUQuota=300%
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,40 @@
[Unit]
Description=AITBC Enhanced Marketplace Service (Port 8006)
Documentation=https://docs.aitbc.bubuit.net
After=network.target aitbc-coordinator-api.service postgresql.service
Wants=aitbc-coordinator-api.service postgresql.service
[Service]
Type=simple
User=aitbc
Group=aitbc
WorkingDirectory=/opt/aitbc/apps/coordinator-api
Environment=PYTHONPATH=/opt/aitbc/apps/coordinator-api/src
Environment=PORT=8006
Environment=SERVICE_TYPE=marketplace-enhanced
Environment=DATABASE_URL=postgresql://aitbc:password@localhost:5432/aitbc
Environment=ROYALTY_ENABLED=true
Environment=LICENSING_ENABLED=true
Environment=LOG_LEVEL=INFO
ExecStart=/opt/aitbc/.venv/bin/python -m aitbc_marketplace_enhanced.main
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=aitbc-marketplace-enhanced
# Security settings
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/aitbc/logs /opt/aitbc/data
LimitNOFILE=65536
# Resource limits
MemoryMax=2G
CPUQuota=200%
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,37 @@
[Unit]
Description=AITBC Modality Optimization Service (Port 8004)
Documentation=https://docs.aitbc.bubuit.net
After=network.target aitbc-coordinator-api.service
Wants=aitbc-coordinator-api.service
[Service]
Type=simple
User=aitbc
Group=aitbc
WorkingDirectory=/opt/aitbc/apps/coordinator-api
Environment=PYTHONPATH=/opt/aitbc/apps/coordinator-api/src
Environment=PORT=8004
Environment=SERVICE_TYPE=modality-optimization
Environment=LOG_LEVEL=INFO
ExecStart=/opt/aitbc/.venv/bin/python -m aitbc_modality_optimization.main
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=aitbc-modality-optimization
# Security settings
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/aitbc/logs /opt/aitbc/data
LimitNOFILE=65536
# Resource limits
MemoryMax=1G
CPUQuota=150%
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,37 @@
[Unit]
Description=AITBC Multi-Modal Agent Service (Port 8002)
Documentation=https://docs.aitbc.bubuit.net
After=network.target aitbc-coordinator-api.service
Wants=aitbc-coordinator-api.service
[Service]
Type=simple
User=aitbc
Group=aitbc
WorkingDirectory=/opt/aitbc/apps/coordinator-api
Environment=PYTHONPATH=/opt/aitbc/apps/coordinator-api/src
Environment=PORT=8002
Environment=SERVICE_TYPE=multimodal
Environment=LOG_LEVEL=INFO
ExecStart=/opt/aitbc/.venv/bin/python -m aitbc_multimodal.main
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=aitbc-multimodal
# Security settings
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/aitbc/logs /opt/aitbc/data
LimitNOFILE=65536
# Resource limits
MemoryMax=2G
CPUQuota=200%
[Install]
WantedBy=multi-user.target

View File

@@ -1,5 +1,5 @@
[Unit]
Description=AITBC Blockchain Node Service
Description=AITBC Blockchain Node Service (Python 3.11+)
After=network.target
Wants=network.target
@@ -11,6 +11,8 @@ WorkingDirectory=/opt/blockchain-node
Environment=PATH=/opt/blockchain-node/.venv/bin
Environment=PYTHONPATH=/opt/blockchain-node
Environment=RUST_LOG=info
# Python version validation
ExecStartPre=/bin/bash -c "python3.11 --version || (echo 'Python 3.11+ required' && exit 1)"
ExecStart=/opt/blockchain-node/.venv/bin/python -m node.main --datadir /opt/blockchain-node/data --rpc-bind 0.0.0.0:8545
ExecReload=/bin/kill -HUP $MAINPID
Restart=always

View File

@@ -0,0 +1,39 @@
[Unit]
Description=AITBC OpenClaw Enhanced Service (Port 8007)
Documentation=https://docs.aitbc.bubuit.net
After=network.target aitbc-coordinator-api.service
Wants=aitbc-coordinator-api.service
[Service]
Type=simple
User=aitbc
Group=aitbc
WorkingDirectory=/opt/aitbc/apps/coordinator-api
Environment=PYTHONPATH=/opt/aitbc/apps/coordinator-api/src
Environment=PORT=8007
Environment=SERVICE_TYPE=openclaw-enhanced
Environment=EDGE_COMPUTING_ENABLED=true
Environment=AGENT_ORCHESTRATION_ENABLED=true
Environment=LOG_LEVEL=INFO
ExecStart=/opt/aitbc/.venv/bin/python -m aitbc_openclaw_enhanced.main
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=aitbc-openclaw-enhanced
# Security settings
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/aitbc/logs /opt/aitbc/data
LimitNOFILE=65536
# Resource limits
MemoryMax=2G
CPUQuota=200%
[Install]
WantedBy=multi-user.target

View File

@@ -1,5 +1,5 @@
[Unit]
Description=AITBC Wallet Daemon Service
Description=AITBC Wallet Daemon Service (Python 3.11+)
After=network.target
Wants=network.target
@@ -10,6 +10,8 @@ Group=root
WorkingDirectory=/opt/wallet-daemon
Environment=PATH=/opt/wallet-daemon/.venv/bin
Environment=PYTHONPATH=/opt/wallet-daemon
# Python version validation
ExecStartPre=/bin/bash -c "python3.11 --version || (echo 'Python 3.11+ required' && exit 1)"
ExecStart=/opt/wallet-daemon/.venv/bin/python -m wallet_daemon.main --host 0.0.0.0 --port 8001
ExecReload=/bin/kill -HUP $MAINPID
Restart=always