diff --git a/deploy/docker-compose.prod.yml b/deploy/docker-compose.prod.yml index 9c31436..bc761ab 100644 --- a/deploy/docker-compose.prod.yml +++ b/deploy/docker-compose.prod.yml @@ -126,11 +126,35 @@ services: LISTEN_ADDR: ":8083" CORE_RUNTIME_URL: http://core-runtime:8080 LOCAL_CPU_PROVIDER_URL: http://docker.cin.su:18082/v1 - LOCAL_LIFEBOAT_PROVIDER_URL: ${LOCAL_LIFEBOAT_PROVIDER_URL:-} + LOCAL_LIFEBOAT_PROVIDER_URL: http://cognitive-lifeboat:8086/v1 LOCAL_GPU_PROVIDER_URL: http://192.168.220.91:11434 COGNITIVE_OWNER_PRINCIPAL_ID: domovoy-creator-principal COGNITIVE_ALLOW_CANARY: "true" - depends_on: [core-runtime] + depends_on: [core-runtime, cognitive-lifeboat] + + cognitive-lifeboat: + image: ghcr.io/ggml-org/llama.cpp:server + restart: unless-stopped + command: + - --host + - 0.0.0.0 + - --port + - "8086" + - --model + - /models/qwen2.5-0.5b-instruct-q4_k_m.gguf + - --alias + - domovoy-lifeboat + - --jinja + - --ctx-size + - "8192" + - --n-gpu-layers + - "0" + - --threads + - "4" + - --parallel + - "1" + volumes: + - llm_local_models:/models:ro creator-web: build: { context: .., dockerfile: deploy/images/runtime.Dockerfile, args: { TARGET: creator-web, SOURCE_REVISION: "${ASSISTANT_SOURCE_REVISION:-unknown}" } } @@ -159,3 +183,6 @@ volumes: external: true assistant_notification_reader_secret: external: true + llm_local_models: + external: true + name: llm-local-models diff --git a/dev/tasks/DEV-000083-domovoy-lifeboat-mode.json b/dev/tasks/DEV-000083-domovoy-lifeboat-mode.json index 7e4b28f..bc6ae54 100644 --- a/dev/tasks/DEV-000083-domovoy-lifeboat-mode.json +++ b/dev/tasks/DEV-000083-domovoy-lifeboat-mode.json @@ -4,11 +4,11 @@ "architecture_revision": "DEV-000073-baseline", "base_repo_revision": "0a2599cfa6255f1a98856d2fd09dc51a2119f525", "risk_tier": "C", - "intent": "Keep Domovoy alive and conversational when the primary cognitive channel is unavailable by supporting an optional local Lifeboat provider and an honest deterministic degraded mode.", + "intent": "Keep Domovoy alive and conversational when the primary cognitive channel is unavailable by running a small local Lifeboat provider and retaining an honest deterministic degraded mode.", "requirement_ids": [ "Primary cognitive settings remain confirmation-controlled while healthy", "Unavailable primary cognition exposes a human-readable degraded mode instead of killing chat", - "An optional small local-only provider can serve as the Lifeboat through the existing Cognitive Gateway", + "A small local-only provider can serve as the Lifeboat through the existing Cognitive Gateway", "The core can still accept and explain configuration requests when all model providers are unavailable" ], "allowed_change_scope": { @@ -50,12 +50,12 @@ ], "side_effects_and_privileges": ["No new privilege", "No external egress", "No direct provider call from Core", "No configuration mutation from browser chat"], "persistence_and_migrations": ["No migration", "Existing conversation and capability observations only"], - "failure_retry_restart": ["Provider absence falls back to the deterministic core reply", "Optional Lifeboat configuration is disabled when its URL is empty", "Restart reconstructs the provider registration from environment"], - "assumptions": ["The optional Lifeboat endpoint implements the existing OpenAI-compatible local adapter contract", "Capability discovery/promotion remains the existing authorized path", "No real test secrets are in scope for this task"], + "failure_retry_restart": ["Provider absence falls back to the deterministic core reply", "The Lifeboat container restarts independently from the primary model runtime", "Restart reconstructs the provider registration from environment"], + "assumptions": ["The Lifeboat endpoint implements the existing OpenAI-compatible local adapter contract", "Capability discovery/promotion remains the existing authorized path", "No real test secrets are in scope for this task"], "acceptance_scenarios": [ "Primary unavailable message says Domovoy remains alive and can help recover", "Configuration request in degraded mode no longer falsely requires the primary model", - "Optional Lifeboat provider is registered only when LOCAL_LIFEBOAT_PROVIDER_URL is configured", + "Production Lifeboat container exposes the configured small local model through the existing gateway adapter", "Chat status distinguishes primary unavailable from Domovoy unavailable", "Healthy mode keeps confirmation/console wording" ],