Przejdź do treści

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.pyEMBED_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.plhttp://localhost:5678 (NAS - n8n) - ntfy.chcedointernetu.plhttp://10.0.0.200:8090 (NAS - ntfy) - voice.chcedointernetu.plhttp://10.0.0.114:8007 (GX10 - voice endpoint kony-brain wrapper) - bdh.chcedointernetu.plhttp://10.0.0.114:8020 (GX10 - kony-bdh) - qwen-vl.chcedointernetu.plhttp://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