fix: update .gitignore to exclude tracked runtime files
Some checks failed
CLI Tests / test-cli (push) Failing after 3s
Security Scanning / security-scan (push) Successful in 22s

- Added cli/config/ to gitignore (CLI configuration files)
- Added dev/cache/logs/ to gitignore (development logs)
- Added dev/config/ to gitignore (development config)
- Added dev/test-nodes/*/data/ to gitignore (test node data)
- Removed tracked runtime files from git index
- Kept apps/coordinator-api/src/app/data/ (contains application code)
- Removed contracts/artifacts/**/*.dbg.json (debug artifacts)
- Removed dev/test-nodes/brother_node/data/*.db (database files)
- Removed dev/cache/logs/*.log (log files)
- Removed dev/config/* (development config files)
This commit is contained in:
aitbc
2026-04-23 12:36:41 +02:00
parent 522655ef92
commit af7a971404
69 changed files with 5 additions and 685 deletions

5
.gitignore vendored
View File

@@ -46,6 +46,11 @@ htmlcov/
*.db-shm *.db-shm
data/ data/
apps/blockchain-node/data/ apps/blockchain-node/data/
cli/config/
dev/cache/logs/
dev/config/
dev/test-nodes/*/data/
# Keep coordinator-api data directory (contains application code)
!apps/coordinator-api/src/app/data/ !apps/coordinator-api/src/app/data/
# =================== # ===================

View File

@@ -1,114 +0,0 @@
"""Configuration management for AITBC CLI"""
import os
import yaml
from pathlib import Path
from typing import Optional
from dataclasses import dataclass, field
from dotenv import load_dotenv
@dataclass
class Config:
"""Configuration object for AITBC CLI"""
coordinator_url: str = "http://127.0.0.1:8000"
api_key: Optional[str] = None
role: Optional[str] = None # admin, client, miner, etc.
config_dir: Path = field(default_factory=lambda: Path.home() / ".aitbc")
config_file: Optional[str] = None
blockchain_rpc_url: str = "http://127.0.0.1:8006"
wallet_url: str = "http://127.0.0.1:8002"
def _validate_localhost_urls(self):
"""Validate that all service URLs point to localhost"""
localhost_prefixes = ["http://localhost:", "http://127.0.0.1:", "https://localhost:", "https://127.0.0.1:"]
urls_to_check = [
("coordinator_url", self.coordinator_url),
("blockchain_rpc_url", self.blockchain_rpc_url),
("wallet_url", self.wallet_url)
]
for url_name, url in urls_to_check:
if not any(url.startswith(prefix) for prefix in localhost_prefixes):
# Force to localhost if not already
if url_name == "coordinator_url":
self.coordinator_url = "http://localhost:8000"
elif url_name == "blockchain_rpc_url":
self.blockchain_rpc_url = "http://localhost:8006"
elif url_name == "wallet_url":
self.wallet_url = "http://localhost:8002"
def __post_init__(self):
"""Initialize configuration"""
# Load environment variables
load_dotenv()
# Set default config file based on role if not specified
if not self.config_file:
if self.role:
self.config_file = str(self.config_dir / f"{self.role}-config.yaml")
else:
self.config_file = str(self.config_dir / "config.yaml")
# Load config from file if it exists
self.load_from_file()
# Override with environment variables
if os.getenv("AITBC_URL"):
self.coordinator_url = os.getenv("AITBC_URL")
if os.getenv("AITBC_API_KEY"):
self.api_key = os.getenv("AITBC_API_KEY")
if os.getenv("AITBC_ROLE"):
self.role = os.getenv("AITBC_ROLE")
if os.getenv("AITBC_BLOCKCHAIN_RPC_URL"):
self.blockchain_rpc_url = os.getenv("AITBC_BLOCKCHAIN_RPC_URL")
if os.getenv("AITBC_WALLET_URL"):
self.wallet_url = os.getenv("AITBC_WALLET_URL")
# Validate and enforce localhost URLs
self._validate_localhost_urls()
def load_from_file(self):
"""Load configuration from YAML file"""
if self.config_file and Path(self.config_file).exists():
try:
with open(self.config_file, 'r') as f:
data = yaml.safe_load(f) or {}
self.coordinator_url = data.get('coordinator_url', self.coordinator_url)
self.api_key = data.get('api_key', self.api_key)
self.role = data.get('role', self.role)
self.blockchain_rpc_url = data.get('blockchain_rpc_url', self.blockchain_rpc_url)
self.wallet_url = data.get('wallet_url', self.wallet_url)
except Exception as e:
print(f"Warning: Could not load config file: {e}")
# Validate and enforce localhost URLs after file loading
self._validate_localhost_urls()
def save_to_file(self):
"""Save configuration to YAML file"""
if not self.config_file:
return
# Ensure config directory exists
Path(self.config_file).parent.mkdir(parents=True, exist_ok=True)
data = {
'coordinator_url': self.coordinator_url,
'api_key': self.api_key,
'blockchain_rpc_url': self.blockchain_rpc_url,
'wallet_url': self.wallet_url
}
if self.role:
data['role'] = self.role
with open(self.config_file, 'w') as f:
yaml.dump(data, f, default_flow_style=False)
def get_config(config_file: Optional[str] = None, role: Optional[str] = None) -> Config:
"""Get configuration instance with optional role"""
return Config(config_file=config_file, role=role)

View File

@@ -1,29 +0,0 @@
description: Genesis configuration for AITBC Development Network
genesis:
accounts:
- address: "aitbc1genesis"
balance: "1000000000000000000000000"
type: "regular"
- address: "aitbc1faucet"
balance: "100000000000000000000000"
type: "faucet"
chain_type: main
consensus:
algorithm: poa
authorities:
- "ait1devproposer000000000000000000000000000000"
block_time: 5
max_validators: 100
contracts: []
description: Development network for AITBC multi-chain testing
name: AITBC Development Network
parameters:
block_reward: "2000000000000000000"
max_block_size: 1048576
max_gas_per_block: 10000000
min_gas_price: 1000000000
privacy:
access_control: open
require_invitation: false
visibility: public
purpose: development

View File

@@ -1,22 +0,0 @@
description: Genesis template for multi-chain-dev
genesis:
accounts: []
chain_type: topic
consensus:
algorithm: pos
authorities: []
block_time: 5
max_validators: 100
contracts: []
description: A multi-chain-dev chain for AITBC
name: Multi-Chain-Dev Chain
parameters:
block_reward: '2000000000000000000'
max_block_size: 1048576
max_gas_per_block: 10000000
min_gas_price: 1000000000
privacy:
access_control: open
require_invitation: false
visibility: public
purpose: multi-chain-dev

View File

@@ -1,31 +0,0 @@
chain:
type: "topic"
purpose: "healthcare"
name: "Healthcare AI Chain"
description: "A specialized chain for healthcare AI applications"
consensus:
algorithm: "pos"
block_time: 5
max_validators: 21
min_stake: 1000000000000000000 # 1 ETH
authorities: []
privacy:
visibility: "public"
access_control: "open"
require_invitation: false
encryption_enabled: false
parameters:
max_block_size: 1048576 # 1MB
max_gas_per_block: 10000000
min_gas_price: 20000000000 # 20 gwei
block_reward: "5000000000000000000" # 5 ETH
difficulty: 1000000
limits:
max_participants: 1000
max_contracts: 100
max_transactions_per_block: 500
max_storage_size: 1073741824 # 1GB

View File

@@ -1,26 +0,0 @@
# Multi-chain configuration for AITBC CLI
nodes:
default-node:
id: default-node
endpoint: http://localhost:8545
timeout: 30
retry_count: 3
max_connections: 10
aitbc-main:
id: aitbc-main
endpoint: http://localhost:8546
timeout: 30
retry_count: 3
max_connections: 10
chains:
default_gas_limit: 10000000
default_gas_price: 20000000000
max_block_size: 1048576
backup_path: ./backups
max_concurrent_chains: 100
logging_level: INFO
enable_caching: true
cache_ttl: 300

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/c3c3dff059b2d1b75090cf2368c4753b.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/9733ae384af13e1bc5099101cffcb80a.json"
}

View File

@@ -1,124 +0,0 @@
2026-02-24 01:18:03,341 - INFO - Starting Real GPU Miner Client on Host...
2026-02-24 01:18:03,358 - INFO - GPU detected: NVIDIA GeForce RTX 4060 Ti (16380MB)
2026-02-24 01:18:03,400 - INFO - HTTP Request: GET http://localhost:11434/api/tags "HTTP/1.1 200 OK"
2026-02-24 01:18:03,400 - INFO - Ollama running with models: ['lauchacarro/qwen2.5-translator:latest', 'gemma3:1b']
2026-02-24 01:18:03,401 - INFO - Ollama models available: lauchacarro/qwen2.5-translator:latest, gemma3:1b
2026-02-24 01:18:03,409 - INFO - HTTP Request: GET http://127.0.0.1:18000/v1/health "HTTP/1.1 200 OK"
2026-02-24 01:18:03,409 - INFO - Coordinator is available!
2026-02-24 01:18:03,478 - INFO - HTTP Request: POST http://127.0.0.1:18000/v1/miners/register?miner_id=${MINER_API_KEY} "HTTP/1.1 401 Unauthorized"
2026-02-24 01:18:03,478 - ERROR - Registration failed: 401 - {"detail":"invalid api key"}
2026-02-24 01:18:03,478 - ERROR - Failed to register, exiting
2026-02-24 01:26:21,106 - INFO - Starting Real GPU Miner Client on Host...
2026-02-24 01:26:21,122 - INFO - GPU detected: NVIDIA GeForce RTX 4060 Ti (16380MB)
2026-02-24 01:26:21,166 - INFO - HTTP Request: GET http://localhost:11434/api/tags "HTTP/1.1 200 OK"
2026-02-24 01:26:21,166 - INFO - Ollama running with models: ['lauchacarro/qwen2.5-translator:latest', 'gemma3:1b']
2026-02-24 01:26:21,166 - INFO - Ollama models available: lauchacarro/qwen2.5-translator:latest, gemma3:1b
2026-02-24 01:26:21,183 - INFO - HTTP Request: GET http://127.0.0.1:18000/v1/health "HTTP/1.1 200 OK"
2026-02-24 01:26:21,183 - INFO - Coordinator is available!
2026-02-24 01:26:21,225 - INFO - HTTP Request: POST http://127.0.0.1:18000/v1/miners/register?miner_id=${MINER_API_KEY} "HTTP/1.1 401 Unauthorized"
2026-02-24 01:26:21,226 - ERROR - Registration failed: 401 - {"detail":"invalid api key"}
2026-02-24 01:26:21,226 - ERROR - Failed to register, exiting
2026-02-24 01:30:07,020 - INFO - Starting Real GPU Miner Client on Host...
2026-02-24 01:30:07,039 - INFO - GPU detected: NVIDIA GeForce RTX 4060 Ti (16380MB)
2026-02-24 01:30:07,099 - INFO - HTTP Request: GET http://localhost:11434/api/tags "HTTP/1.1 200 OK"
2026-02-24 01:30:07,100 - INFO - Ollama running with models: ['lauchacarro/qwen2.5-translator:latest', 'gemma3:1b']
2026-02-24 01:30:07,100 - INFO - Ollama models available: lauchacarro/qwen2.5-translator:latest, gemma3:1b
2026-02-24 01:30:07,109 - INFO - HTTP Request: GET http://127.0.0.1:18000/v1/health "HTTP/1.1 200 OK"
2026-02-24 01:30:07,110 - INFO - Coordinator is available!
2026-02-24 01:30:07,157 - INFO - HTTP Request: POST http://127.0.0.1:18000/v1/miners/register?miner_id=${MINER_API_KEY} "HTTP/1.1 401 Unauthorized"
2026-02-24 01:30:07,157 - ERROR - Registration failed: 401 - {"detail":"invalid api key"}
2026-02-24 01:30:07,157 - ERROR - Failed to register, exiting
2026-02-24 01:30:56,038 - INFO - Starting Real GPU Miner Client on Host...
2026-02-24 01:30:56,055 - INFO - GPU detected: NVIDIA GeForce RTX 4060 Ti (16380MB)
2026-02-24 01:30:56,098 - INFO - HTTP Request: GET http://localhost:11434/api/tags "HTTP/1.1 200 OK"
2026-02-24 01:30:56,098 - INFO - Ollama running with models: ['lauchacarro/qwen2.5-translator:latest', 'gemma3:1b']
2026-02-24 01:30:56,098 - INFO - Ollama models available: lauchacarro/qwen2.5-translator:latest, gemma3:1b
2026-02-24 01:30:56,107 - INFO - HTTP Request: GET http://127.0.0.1:18000/v1/health "HTTP/1.1 200 OK"
2026-02-24 01:30:56,107 - INFO - Coordinator is available!
2026-02-24 01:30:56,151 - INFO - HTTP Request: POST http://127.0.0.1:18000/v1/miners/register?miner_id=${MINER_API_KEY} "HTTP/1.1 401 Unauthorized"
2026-02-24 01:30:56,151 - ERROR - Registration failed: 401 - {"detail":"invalid api key"}
2026-02-24 01:30:56,151 - ERROR - Failed to register, exiting
2026-02-24 01:31:11,594 - INFO - Starting Real GPU Miner Client on Host...
2026-02-24 01:31:11,613 - INFO - GPU detected: NVIDIA GeForce RTX 4060 Ti (16380MB)
2026-02-24 01:31:11,657 - INFO - HTTP Request: GET http://localhost:11434/api/tags "HTTP/1.1 200 OK"
2026-02-24 01:31:11,657 - INFO - Ollama running with models: ['lauchacarro/qwen2.5-translator:latest', 'gemma3:1b']
2026-02-24 01:31:11,657 - INFO - Ollama models available: lauchacarro/qwen2.5-translator:latest, gemma3:1b
2026-02-24 01:31:11,665 - INFO - HTTP Request: GET http://127.0.0.1:18000/v1/health "HTTP/1.1 200 OK"
2026-02-24 01:31:11,665 - INFO - Coordinator is available!
2026-02-24 01:31:11,709 - INFO - HTTP Request: POST http://127.0.0.1:18000/v1/miners/register?miner_id=miner_test_abc123 "HTTP/1.1 401 Unauthorized"
2026-02-24 01:31:11,710 - ERROR - Registration failed: 401 - {"detail":"invalid api key"}
2026-02-24 01:31:11,710 - ERROR - Failed to register, exiting
2026-02-24 01:34:47,687 - INFO - Starting Real GPU Miner Client on Host...
2026-02-24 01:34:47,705 - INFO - GPU detected: NVIDIA GeForce RTX 4060 Ti (16380MB)
2026-02-24 01:34:47,749 - INFO - HTTP Request: GET http://localhost:11434/api/tags "HTTP/1.1 200 OK"
2026-02-24 01:34:47,750 - INFO - Ollama running with models: ['lauchacarro/qwen2.5-translator:latest', 'gemma3:1b']
2026-02-24 01:34:47,750 - INFO - Ollama models available: lauchacarro/qwen2.5-translator:latest, gemma3:1b
2026-02-24 01:34:47,758 - INFO - HTTP Request: GET http://127.0.0.1:18000/v1/health "HTTP/1.1 200 OK"
2026-02-24 01:34:47,758 - INFO - Coordinator is available!
2026-02-24 01:34:47,800 - INFO - HTTP Request: POST http://127.0.0.1:18000/v1/miners/register?miner_id=miner_test_abc123 "HTTP/1.1 401 Unauthorized"
2026-02-24 01:34:47,801 - ERROR - Registration failed: 401 - {"detail":"invalid api key"}
2026-02-24 01:34:47,801 - ERROR - Failed to register, exiting
2026-02-24 01:38:15,668 - INFO - Starting Real GPU Miner Client on Host...
2026-02-24 01:38:15,685 - INFO - GPU detected: NVIDIA GeForce RTX 4060 Ti (16380MB)
2026-02-24 01:38:15,697 - INFO - HTTP Request: GET http://localhost:11434/api/tags "HTTP/1.1 200 OK"
2026-02-24 01:38:15,698 - INFO - Ollama running with models: ['lauchacarro/qwen2.5-translator:latest', 'gemma3:1b']
2026-02-24 01:38:15,698 - INFO - Ollama models available: lauchacarro/qwen2.5-translator:latest, gemma3:1b
2026-02-24 01:38:15,707 - INFO - Waiting for coordinator... (1/10)
2026-02-24 01:38:45,715 - INFO - Waiting for coordinator... (2/10)
2026-02-24 01:39:15,723 - INFO - Waiting for coordinator... (3/10)
2026-02-24 01:39:45,732 - INFO - Waiting for coordinator... (4/10)
2026-02-24 01:39:48,945 - INFO - Starting Real GPU Miner Client on Host...
2026-02-24 01:39:48,963 - INFO - GPU detected: NVIDIA GeForce RTX 4060 Ti (16380MB)
2026-02-24 01:39:49,006 - INFO - HTTP Request: GET http://localhost:11434/api/tags "HTTP/1.1 200 OK"
2026-02-24 01:39:49,006 - INFO - Ollama running with models: ['lauchacarro/qwen2.5-translator:latest', 'gemma3:1b']
2026-02-24 01:39:49,006 - INFO - Ollama models available: lauchacarro/qwen2.5-translator:latest, gemma3:1b
2026-02-24 01:39:49,013 - INFO - Waiting for coordinator... (1/10)
2026-02-24 01:40:19,020 - INFO - Waiting for coordinator... (2/10)
2026-02-24 01:40:49,027 - INFO - Waiting for coordinator... (3/10)
2026-02-24 01:49:22,772 - INFO - Starting Real GPU Miner Client on Host...
2026-02-24 01:49:22,790 - INFO - GPU detected: NVIDIA GeForce RTX 4060 Ti (16380MB)
2026-02-24 01:49:22,802 - INFO - HTTP Request: GET http://localhost:11434/api/tags "HTTP/1.1 200 OK"
2026-02-24 01:49:22,803 - INFO - Ollama running with models: ['lauchacarro/qwen2.5-translator:latest', 'gemma3:1b']
2026-02-24 01:49:22,803 - INFO - Ollama models available: lauchacarro/qwen2.5-translator:latest, gemma3:1b
2026-02-24 01:49:22,812 - INFO - HTTP Request: GET http://127.0.0.1:8000/v1/health "HTTP/1.1 200 OK"
2026-02-24 01:49:22,812 - INFO - Coordinator is available!
2026-02-24 01:49:22,942 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/register?miner_id=miner_test_abc123 "HTTP/1.1 200 OK"
2026-02-24 01:49:22,943 - INFO - Successfully registered miner: {'status': 'ok', 'session_token': '679f256001e04bdd842beb18f6d83ac8'}
2026-02-24 01:49:22,943 - INFO - Miner registered successfully, starting main loop...
2026-02-24 01:49:22,972 - INFO - HTTP Request: GET http://127.0.0.1:8000/v1/health "HTTP/1.1 200 OK"
2026-02-24 01:49:23,173 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/heartbeat?miner_id=miner_test_abc123 "HTTP/1.1 200 OK"
2026-02-24 01:49:23,173 - INFO - Heartbeat sent (GPU: 34%)
2026-02-24 01:49:23,185 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:49:26,197 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:49:29,213 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:49:32,223 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:49:35,234 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:49:38,260 - INFO - HTTP Request: GET http://127.0.0.1:8000/v1/health "HTTP/1.1 200 OK"
2026-02-24 01:49:38,320 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/heartbeat?miner_id=miner_test_abc123 "HTTP/1.1 200 OK"
2026-02-24 01:49:38,320 - INFO - Heartbeat sent (GPU: 38%)
2026-02-24 01:49:38,330 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:49:41,340 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:49:44,351 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:49:47,361 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:49:50,372 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:49:53,409 - INFO - HTTP Request: GET http://127.0.0.1:8000/v1/health "HTTP/1.1 200 OK"
2026-02-24 01:49:53,508 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/heartbeat?miner_id=miner_test_abc123 "HTTP/1.1 200 OK"
2026-02-24 01:49:53,514 - INFO - Heartbeat sent (GPU: 28%)
2026-02-24 01:49:53,526 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:49:56,537 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:49:59,548 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:50:02,558 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:50:05,568 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:50:08,599 - INFO - HTTP Request: GET http://127.0.0.1:8000/v1/health "HTTP/1.1 200 OK"
2026-02-24 01:50:08,656 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/heartbeat?miner_id=miner_test_abc123 "HTTP/1.1 200 OK"
2026-02-24 01:50:08,657 - INFO - Heartbeat sent (GPU: 32%)
2026-02-24 01:50:08,666 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:50:11,676 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:50:14,686 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:50:17,697 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:50:20,708 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:50:23,746 - INFO - HTTP Request: GET http://127.0.0.1:8000/v1/health "HTTP/1.1 200 OK"
2026-02-24 01:50:23,802 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/heartbeat?miner_id=miner_test_abc123 "HTTP/1.1 200 OK"
2026-02-24 01:50:23,803 - INFO - Heartbeat sent (GPU: 28%)
2026-02-24 01:50:23,812 - INFO - HTTP Request: POST http://127.0.0.1:8000/v1/miners/poll "HTTP/1.1 204 No Content"
2026-02-24 01:50:24,194 - INFO - Shutting down miner...

View File

@@ -1,13 +0,0 @@
# Editor configuration for AITBC monorepo
root = true
[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true
[*.{py,js,ts,tsx,json,yaml,yml,md}]
indent_size = 2

View File

@@ -1,102 +0,0 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
- id: check-json
- id: check-merge-conflict
- id: debug-statements
- id: check-docstring-first
- id: check-executables-have-shebangs
- id: check-toml
- id: check-xml
- id: check-case-conflict
- id: check-ast
- id: check-builddir
- id: check-shebang-scripts
- repo: https://github.com/psf/black
rev: 23.3.0
hooks:
- id: black
language_version: python3
args: [--line-length=127]
- repo: https://github.com/pycqa/isort
rev: 5.12.0
hooks:
- id: isort
args: [--profile=black, --line-length=127]
- repo: https://github.com/pycqa/flake8
rev: 6.0.0
hooks:
- id: flake8
args: [--max-line-length=127, --extend-ignore=E203,W503]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.3.0
hooks:
- id: mypy
additional_dependencies: [types-requests, types-python-dateutil]
args: [--ignore-missing-imports]
- repo: https://github.com/PyCQA/bandit
rev: 1.7.5
hooks:
- id: bandit
args: [-r, ., -f, json, -o, bandit-report.json]
pass_filenames: false
- repo: https://github.com/pycqa/pydocstyle
rev: 6.3.0
hooks:
- id: pydocstyle
args: [--convention=google]
- repo: https://github.com/asottile/pyupgrade
rev: v3.3.1
hooks:
- id: pyupgrade
args: [--py311-plus]
- repo: https://github.com/Lucas-C/pre-commit-hooks-safety
rev: v1.3.2
hooks:
- id: python-safety-dependencies-check
files: requirements.*\.txt$
- repo: https://github.com/Lucas-C/pre-commit-hooks-safety
rev: v1.3.2
hooks:
- id: python-safety-check
args: [--json, --output, safety-report.json]
- repo: local
hooks:
- id: pytest-check
name: pytest-check
entry: pytest
language: system
args: [tests/unit/, --tb=short, -q]
pass_filenames: false
always_run: true
- id: security-check
name: security-check
entry: pytest
language: system
args: [tests/security/, --tb=short, -q]
pass_filenames: false
always_run: true
- id: performance-check
name: performance-check
entry: pytest
language: system
args: [tests/performance/test_performance_lightweight.py::TestPerformance::test_cli_performance, --tb=short, -q]
pass_filenames: false
always_run: true