01 - Moduły Kony (element po elemencie)¶
Każdy moduł: co robi, port/endpoint, dependencje, gdzie source, jak zrestartować.
GX10 (10.0.0.114) - lokalne AI compute¶
kony-brain :8000¶
Rola: Główny mózg agentowy. Qwen 32B AWQ jako orchestrator + registry 27+ tools (FlexyCRM, calendar, gmail, HA, RAG) + auto-inject RAG context.
Endpointy (FastAPI):
- POST /converse - audio in (base64) → audio out (WAV bytes) - główny endpoint voice conversation
- POST /converse/text - tekst in → JSON reply + audio bytes
- POST /voice/note - audio in → save do Kony Hub (Kony #N) + short reply
- POST /enrich/text - text z URL → URL preview + summary
- GET /rag/status - RAG index size
- POST /rag/backfill - reindex captures z Kony Hub
- POST /rag/search - semantic search
- /.well-known/agent-card.json + /jsonrpc - A2A protocol (Aureliusz może wywoływać)
Source: kony-brain/ (app.py, tools.py, rag.py, bridge_tools.py, a2a.py, Dockerfile)
Dependencje: kony-vl :8004 (rzadko, tylko obraz), vllm-qwen32b :8001, vllm-bielik :8000 (KOLIZJA PORTU z kony-brain! Sprawdź actual - może bielik na innym porcie), kony-tts-xtts :8017, kony-whisper :8010, kony-embed :8018
Restart: ssh gx10 "docker restart kony-brain". Chodzi 2-3 min zanim RAG index się załaduje z Kony Hub (backfill startup).
Ważne env vars:
- QWEN_URL=http://localhost:8001
- BIELIK_URL=http://localhost:8000 (bielik)
- KONY_HUB_URL=https://crm.chcedointernetu.pl
- KONY_CAPTURE_SECRET=NxFk4yZLH-... (shared z Worker)
- EMBED_URL=http://localhost:8018 (kony-embed, nie chwytek-embed 8003!)
kony-vl :8004 (Qwen VL)¶
Rola: Vision Language Model (Qwen2.5-VL-7B-Instruct-AWQ). Klasyfikuje screenshoty od Konrada. Wywoływany przez CF Worker (nie kony-brain) przez tunel qwen-vl.chcedointernetu.pl.
Endpoint: POST /v1/chat/completions (OpenAI-compatible)
Image: ghcr.io/timothystewart6/vllm-gb10:latest (community build vLLM dla GB10 ARM64+Blackwell)
Cmd: vllm serve Qwen/Qwen2.5-VL-7B-Instruct-AWQ --host 0.0.0.0 --port 8004 --gpu-memory-utilization 0.25 --max-model-len 8192 --limit-mm-per-prompt image=2
Restart: docker restart kony-vl (30-60s cold start bo model load)
Config env: HF_TOKEN=hf_... w mount ~/.cache/huggingface
kony-bdh :8020 (Baby Dragon Hatchling)¶
Rola: Interpretability + shadow classifier. Backbone BDH v2 (14.57M params, self-supervised na Kony corpus) + linear probe head (FAKTURA/OTHER, val 88%).
Endpointy:
- GET /health - GPU status
- POST /forward - text in → per-layer neuron activations JSON (dla D3.js viz frontend)
- POST /classify - text in → predicted_intent + confidence + probs
- GET / - HTML frontend (D3 live viz na bdh.chcedointernetu.pl)
- WS /live - websocket dla real-time viz
Source: kony-bdh/ (server_v2.py, bdh_hooked_v2.py, train_*.py, corpus, frontend.html)
Checkpoints: bdh_kony_v2_checkpoint.pt (58MB) + bdh_classifier_v2_checkpoint.pt (175KB) - trzymane w ~/kony-bdh/*.pt na GX10 + backup w Vallhalen/kony-checkpoints repo.
Env kritical:
- PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True (Blackwell OOM fix)
- CHECKPOINT_PATH=/workspace/bdh_kony_v2_checkpoint.pt
- CLASSIFIER_PATH=/workspace/bdh_classifier_v2_checkpoint.pt
Volume: ~/kony-bdh → /workspace
Restart: docker restart kony-bdh (10-20s, model load do VRAM)
Ważny detal: musisz używać with ctx: (bfloat16 autocast) w klasyfikacji zgodnej z trening pathway, inaczej feature vectors bf16 vs fp32 mismatch → losowe wyniki.
kony-embed :8018 (mmlw retrieval)¶
Rola: Polski SOTA embedder (sdadas/mmlw-retrieval-roberta-large). Osobny od chwytek-embed :8003 (izolacja Kony vs knobs.pl - patrz [[feedback_kony_chwytek_isolation]]).
Endpointy:
- POST /embed - {"texts": [...], "input_type": "query"|"passage"|"raw"} → embeddings 1024-dim normalized
- GET /health
- GET /model_info
Prefix: dla queries zapytanie:, dla passages pusty.
Source: kony-embed/ (main.py + Dockerfile, image chwytek-embed:1.0 - ten sam image co chwytek, tylko inny kontener + port)
Restart: docker restart kony-embed
Używane przez: kony-brain/rag.py → EMBED_URL=http://localhost:8018 (NIE :8003, bo to chwytek!)
kony-tts-xtts :8017 (XTTS voice clone)¶
Rola: XTTS-v2 z voice clone Konrada. Reference audio 17s w ~/kony-tts-xtts/reference/konrad.wav.
Endpointy:
- POST /tts - {"text": "..."} → WAV bytes
Source: kony-tts-xtts/ (app.py + Dockerfile)
Kluczowe: transformers==4.44.2 (kompatybilność z coqui-tts), Piper i F5-TTS deprecated dla PL.
Restart: docker restart kony-tts-xtts (30s cold start, model load)
Wymaga: ~/kony-tts-xtts/reference/konrad.wav - NIE w git (dane osobiste). Backup na nowej maszynie: odtworzyć nagraniem 15 sek Konradowego głosu.
kony-whisper :8010¶
Rola: Whisper STT dla voice notes.
Image: fedirz/faster-whisper-server:latest-cuda (publiczny)
Endpoint: POST /v1/audio/transcriptions (OpenAI-compatible)
Env: WHISPER_MODEL=faster-whisper-medium (albo -large-v3 dla polskiego)
Restart: docker restart kony-whisper
vllm-bielik i vllm-qwen32b (backing LLM)¶
vllm-bielik :8000 - speakleash/Bielik-11B-v3.0-Instruct FP16 dla PL content polish (Kony voice odpowiedzi są przez Bielika żeby brzmiały naturalnie po polsku).
vllm-qwen32b :8001 - Qwen/Qwen2.5-32B-Instruct-AWQ z --enable-auto-tool-choice --tool-call-parser hermes - orchestrator który używa 27 tools.
KOLIZJA PORTU: Bielik i kony-brain oba na :8000?! Sprawdź ss -tlnp | grep 8000 - może kony-brain jest na innym porcie w rzeczywistości. Docker --network host - jeden musi ustąpić.
Restart: docker restart vllm-bielik vllm-qwen32b (60s każdy - model load do VRAM).
bielik-guard :8002¶
Rola: Safety classifier speakleash/Bielik-Guard-0.5B-v1.1 (alias "Sójka"). 5 kategorii bezpieczeństwa, SAFETY_THRESHOLD=0.7 (zwiększony z 0.5 bo false positives na tekstach bez polskich diakrytyków).
Endpointy: POST /classify, POST /classify_batch, GET /health
Source: bielik-guard/ (main.py + Dockerfile)
NAS Synology (10.0.0.200) - workflow orchestration + tunnel gateway¶
cloudflared tunnel nas-vallhala¶
Tunnel id: 15f1c70e-da23-4304-9743-d28f9f316c10
Ingress rules (6, patrz [[reference_cf_tunnel_nas_vallhala]]):
- n8n.chcedointernetu.pl → http://localhost:5678 (NAS - n8n)
- ntfy.chcedointernetu.pl → http://10.0.0.200:8090 (NAS - ntfy)
- voice.chcedointernetu.pl → http://10.0.0.114:8007 (GX10 - voice endpoint kony-brain wrapper)
- bdh.chcedointernetu.pl → http://10.0.0.114:8020 (GX10 - kony-bdh)
- qwen-vl.chcedointernetu.pl → http://10.0.0.114:8004 (GX10 - kony-vl)
- catch-all → 404
Dodawanie nowego hostname: playbook w [[reference_cf_tunnel_nas_vallhala]]. DNS CNAME w CF dashboard + ingress rule PUT via API (wrangler OAuth ma connectivity:admin).
n8n workflows (4 aktywne)¶
88zekiBO4NPeMpjn - Kony Bridge (35 nodes)
- Webhook /kony-bridge odbiera intent calendar.today/this_week/next_event, gmail.unread/recent/search, homeassistant.states/turn_on/turn_off/speak
- Wywoływany przez kony-brain (bridge_tools.py) gdy Qwen tool_use
- Fix 2026-09-01: Merge combineAll → append (cartesian bug) + JS date filter w Format events (n8n GC options.timeMin nie ewaluuje expressions)
Aa71Vkjx49JPVX0e - Kony Faktury → SALDEO (15 nodes) - Cron 60min: Gmail search zagraniczne faktury → Qwen 32B classify → SALDEO email - BDH shadow classifier dodany 2026-09-01 (task #94 done) - loguje BDH prediction do Kony Hub llm_analysis, decyzja dalej przez Qwen (Wariant C observe-only). Review 2026-09-08 (task #96).
rTasxDFwvfzN7p8h - DMARC Watchdog (14 nodes) - Cron 15min: DMARC reports z Gmail → archiwizuj OK, alert na problem
8DuzNgoDXp9R3ahL - AI Desk Lead Flow (29 nodes) - Lead intake + CRM entry
API access: X-N8N-API-KEY z ~/.n8n-api-key.txt (GX10) / C:/Users/Vallhalen/.config/n8n/api-key.txt (PC).
Cloudflare Worker: send-to-second-brain¶
Nie na GX10 - runs on CF edge. Kod w Vallhalen/send-to-second-brain repo.
Rola: Główny router capture pipeline. Endpoints:
- POST /api/capture - screenshot/text/audio → vision classify → route → push
- GET /api/history - lista ostatnich capture'ów (dla apki KonyAI History screen)
- GET /api/health
Config (wrangler.jsonc + secrets):
- VISION_PROVIDER=qwen (albo claude jako fallback)
- GX10_INTERNAL_URL=https://qwen-vl.chcedointernetu.pl (Qwen VL tunel)
- KONY_CAPTURE_SECRET, FLEXYCRM_API_KEY, ANTHROPIC_API_KEY, etc.
Deploy: cd send-to-second-brain/worker && wrangler deploy
Pokrewne dokumenty¶
- 00-overview.md - high level
- 02-deploy-runbook.md - odtwarzanie od zera
- 03-data-flow.md - pełen capture + voice pipeline
- 04-tools-registry.md - 27+ tools Qwen orchestrator
- 05-troubleshooting.md - znane bugi