feat(fabric): decommission Swapper from critical path, NCS = source of truth
- Node Worker: replace swapper_vision with ollama_vision (direct Ollama API) - Node Worker: add NATS subjects for stt/tts/image (stubs ready) - Node Worker: remove SWAPPER_URL dependency from config - Router: vision calls go directly to Ollama /api/generate with images - Router: local LLM calls go directly to Ollama /api/generate - Router: add OLLAMA_URL and PREFER_NODE_WORKER=true feature flag - Router: /v1/models now uses NCS global capabilities pool - NCS: SWAPPER_URL="" -> skip Swapper probing (status=disabled) - Swapper configs: remove all hardcoded model lists, keep only runtime URLs, timeouts, limits - docker-compose.node1.yml: add OLLAMA_URL, PREFER_NODE_WORKER for router; SWAPPER_URL= for NCS; remove swapper-service from node-worker depends_on - docker-compose.node2-sofiia.yml: same changes for NODA2 Swapper service still runs but is NOT in the critical inference path. Source of truth for models is now NCS -> Ollama /api/tags. Made-with: Cursor
This commit is contained in:
@@ -1,186 +1,37 @@
|
||||
# Swapper Configuration for Node #1 (Production Server)
|
||||
# Optimized Multimodal Stack: LLM + Vision + OCR + Document + Audio
|
||||
# Hetzner GEX44 - NVIDIA RTX 4000 SFF Ada (20GB VRAM)
|
||||
#
|
||||
# ВАЖЛИВО: Ембедінги через зовнішні API:
|
||||
# - Text: Cohere API (embed-multilingual-v3.0, 1024 dim)
|
||||
# - Image: Vision Encoder (OpenCLIP ViT-L/14, 768 dim)
|
||||
# НЕ використовуємо локальні embedding моделі!
|
||||
# NOTE: Swapper is now a runtime gateway / executor only.
|
||||
# Source of truth for models is NCS (Node Capabilities Service).
|
||||
# No hardcoded model lists — Swapper queries NCS or Ollama /api/tags at startup.
|
||||
|
||||
swapper:
|
||||
mode: multi-active
|
||||
max_concurrent_models: 4 # LLM + OCR + STT + TTS (до 15GB)
|
||||
node_id: noda1
|
||||
|
||||
runtimes:
|
||||
ollama:
|
||||
url: http://172.18.0.1:11434
|
||||
timeout: 300
|
||||
# comfyui:
|
||||
# url: http://127.0.0.1:8188
|
||||
|
||||
limits:
|
||||
llm_concurrency: 2
|
||||
vision_concurrency: 1
|
||||
max_concurrent_models: 4
|
||||
model_swap_timeout: 300
|
||||
gpu_enabled: true
|
||||
|
||||
timeouts:
|
||||
llm_ms: 120000
|
||||
vision_ms: 180000
|
||||
stt_ms: 60000
|
||||
tts_ms: 60000
|
||||
image_gen_ms: 300000
|
||||
|
||||
gpu:
|
||||
enabled: true
|
||||
metal_acceleration: false
|
||||
default_model: qwen3-8b
|
||||
lazy_load_ocr: true
|
||||
lazy_load_audio: true
|
||||
# Автоматичне вивантаження при нестачі VRAM
|
||||
auto_unload_on_oom: true
|
||||
vram_threshold_gb: 18 # Починати вивантажувати при 18GB
|
||||
|
||||
models:
|
||||
# ============================================
|
||||
# LLM MODELS (Ollama) - тільки qwen3
|
||||
# ============================================
|
||||
|
||||
# Primary LLM - Qwen3 8B (includes math, coding, reasoning)
|
||||
qwen3-8b:
|
||||
path: ollama:qwen3:8b
|
||||
type: llm
|
||||
size_gb: 5.2
|
||||
priority: high
|
||||
description: "Qwen3 8B - primary LLM with math, coding, reasoning capabilities"
|
||||
capabilities:
|
||||
- chat
|
||||
- math
|
||||
- coding
|
||||
- reasoning
|
||||
- multilingual
|
||||
|
||||
# ============================================
|
||||
# VISION MODELS (Ollama)
|
||||
# ============================================
|
||||
|
||||
# Vision Model - Qwen3-VL 8B
|
||||
qwen3-vl-8b:
|
||||
path: ollama:qwen3-vl:8b
|
||||
type: vision
|
||||
size_gb: 6.1
|
||||
priority: high
|
||||
description: "Qwen3-VL 8B for image understanding and visual reasoning"
|
||||
capabilities:
|
||||
- image_understanding
|
||||
- visual_qa
|
||||
- diagram_analysis
|
||||
- ocr_basic
|
||||
|
||||
# ============================================
|
||||
# OCR/DOCUMENT MODELS (HuggingFace)
|
||||
# ============================================
|
||||
|
||||
# GOT-OCR2.0 - Best for documents, tables, formulas
|
||||
got-ocr2:
|
||||
path: huggingface:stepfun-ai/GOT-OCR2_0
|
||||
type: ocr
|
||||
size_gb: 7.0
|
||||
priority: high
|
||||
description: "Best OCR for documents, tables, formulas, handwriting"
|
||||
capabilities:
|
||||
- documents
|
||||
- tables
|
||||
- formulas
|
||||
- handwriting
|
||||
- multilingual
|
||||
|
||||
# Donut - Document Understanding (no external OCR, 91% CORD)
|
||||
donut-base:
|
||||
path: huggingface:naver-clova-ix/donut-base
|
||||
type: ocr
|
||||
size_gb: 3.0
|
||||
priority: high
|
||||
description: "Document parsing without OCR engine (91% CORD accuracy)"
|
||||
capabilities:
|
||||
- document_parsing
|
||||
- receipts
|
||||
- forms
|
||||
- invoices
|
||||
|
||||
# Donut fine-tuned for receipts/invoices (CORD dataset)
|
||||
donut-cord:
|
||||
path: huggingface:naver-clova-ix/donut-base-finetuned-cord-v2
|
||||
type: ocr
|
||||
size_gb: 3.0
|
||||
priority: medium
|
||||
description: "Donut fine-tuned for receipts extraction"
|
||||
capabilities:
|
||||
- receipts
|
||||
- invoices
|
||||
- structured_extraction
|
||||
|
||||
# IBM Granite Docling - Document conversion with structure preservation
|
||||
granite-docling:
|
||||
path: huggingface:ds4sd/docling-ibm-granite-vision-1b
|
||||
type: document
|
||||
size_gb: 2.5
|
||||
priority: high
|
||||
description: "IBM Granite Docling for PDF/document structure extraction"
|
||||
capabilities:
|
||||
- pdf_conversion
|
||||
- table_extraction
|
||||
- formula_extraction
|
||||
- layout_preservation
|
||||
- doctags_format
|
||||
|
||||
# ============================================
|
||||
# AUDIO MODELS - STT (Speech-to-Text)
|
||||
# ============================================
|
||||
|
||||
# Faster Whisper Large-v3 - Best STT quality
|
||||
faster-whisper-large:
|
||||
path: huggingface:Systran/faster-whisper-large-v3
|
||||
type: stt
|
||||
size_gb: 3.0
|
||||
priority: high
|
||||
description: "Faster Whisper Large-v3 - best quality, 99 languages"
|
||||
capabilities:
|
||||
- speech_recognition
|
||||
- transcription
|
||||
- multilingual
|
||||
- timestamps
|
||||
- ukrainian
|
||||
|
||||
# Whisper Small - Fast/lightweight for quick transcription
|
||||
whisper-small:
|
||||
path: huggingface:openai/whisper-small
|
||||
type: stt
|
||||
size_gb: 0.5
|
||||
priority: medium
|
||||
description: "Whisper Small for fast transcription"
|
||||
capabilities:
|
||||
- speech_recognition
|
||||
- transcription
|
||||
|
||||
# ============================================
|
||||
# AUDIO MODELS - TTS (Text-to-Speech)
|
||||
# ============================================
|
||||
|
||||
# Coqui XTTS-v2 - Best multilingual TTS with Ukrainian support
|
||||
xtts-v2:
|
||||
path: huggingface:coqui/XTTS-v2
|
||||
type: tts
|
||||
size_gb: 2.0
|
||||
priority: high
|
||||
description: "XTTS-v2 multilingual TTS with voice cloning, Ukrainian support"
|
||||
capabilities:
|
||||
- text_to_speech
|
||||
- voice_cloning
|
||||
- multilingual
|
||||
- ukrainian
|
||||
- 17_languages
|
||||
|
||||
# ============================================
|
||||
# IMAGE GENERATION MODELS (HuggingFace/Diffusers)
|
||||
# ============================================
|
||||
|
||||
# FLUX.2 Klein 4B - High quality image generation with lazy loading
|
||||
flux-klein-4b:
|
||||
path: huggingface:black-forest-labs/FLUX.2-klein-base-4B
|
||||
type: image_generation
|
||||
size_gb: 15.4
|
||||
priority: medium
|
||||
description: "FLUX.2 Klein 4B - high quality image generation, lazy loaded on demand"
|
||||
capabilities:
|
||||
- text_to_image
|
||||
- high_quality
|
||||
- 1024x1024
|
||||
- artistic
|
||||
default_params:
|
||||
num_inference_steps: 50
|
||||
guidance_scale: 4.0
|
||||
width: 1024
|
||||
height: 1024
|
||||
vram_threshold_gb: 18
|
||||
|
||||
storage:
|
||||
models_dir: /app/models
|
||||
@@ -188,33 +39,8 @@ storage:
|
||||
swap_dir: /app/swap
|
||||
huggingface_cache: /root/.cache/huggingface
|
||||
|
||||
ollama:
|
||||
url: http://172.18.0.1:11434
|
||||
timeout: 300
|
||||
|
||||
huggingface:
|
||||
device: cuda
|
||||
torch_dtype: float16
|
||||
trust_remote_code: true
|
||||
low_cpu_mem_usage: true
|
||||
|
||||
# ============================================
|
||||
# EMBEDDING SERVICES (External APIs)
|
||||
# НЕ через Swapper - окремі сервіси!
|
||||
# ============================================
|
||||
#
|
||||
# Text Embeddings:
|
||||
# Service: Memory Service → Cohere API
|
||||
# Model: embed-multilingual-v3.0
|
||||
# Dimension: 1024
|
||||
# Endpoint: Memory Service handles internally
|
||||
#
|
||||
# Image/Multimodal Embeddings:
|
||||
# Service: Vision Encoder (port 8001)
|
||||
# Model: OpenCLIP ViT-L/14
|
||||
# Dimension: 768
|
||||
# Endpoint: http://vision-encoder:8001/embed
|
||||
#
|
||||
# Vector Storage:
|
||||
# Qdrant (port 6333) - separate collections for text vs image embeddings
|
||||
# ВАЖЛИВО: НЕ змішувати embedding spaces в одній колекції!
|
||||
|
||||
Reference in New Issue
Block a user