diff --git a/README.md b/README.md index 846e4d7..40bdab7 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,5 @@ The gateway also fronts SearXNG-backed web search — see `docs/research/litellm ## What's not here -Two features from earlier iterations of this stack were deliberately removed, not just left unfinished: - -- **Open WebUI + Qdrant** — this stack has no chat UI; every client is a coding CLI. Removed rather than kept idle. -- **Gateway-level knowledgebase/memory** (`litellm-pgvector`, `pgvector-db`, a dedicated embedding model) — removed as unwanted, unrelated to OmniRoute's own lack of parity with it (see issue #31's #34). +- **Open WebUI** — this stack has no chat UI; every client is a coding CLI. Removed rather than kept idle. +- **Gateway-level knowledgebase/memory** (`litellm-pgvector`, `pgvector-db`, a dedicated embedding model) — removed as unwanted, unrelated to OmniRoute's own lack of parity with it (see issue #31's #34). Superseded by OmniRoute's own memory feature, backed by `qdrant` (bare service — wired up as a memory provider by hand in the dashboard, no static config here). diff --git a/docker-compose.yml b/docker-compose.yml index 9f4f30f..f1de11d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -56,6 +56,22 @@ services: curl -L --fail --create-dirs -o /models/${LLAMA_MODEL_FILE:-Qwen3.8-27B-UD-Q4_K_XL.gguf} https://huggingface.co/unsloth/Qwen3.8-27B-GGUF/resolve/main/${LLAMA_MODEL_FILE:-Qwen3.8-27B-UD-Q4_K_XL.gguf} + # Vector store for OmniRoute's memory feature — wired up in the OmniRoute + # dashboard as a memory service, not via static config here. Not published + # to the host: only OmniRoute (same ai-stack network) talks to it. + qdrant: + image: qdrant/qdrant:latest + container_name: qdrant + volumes: + - qdrant-data:/qdrant/storage + restart: unless-stopped + networks: [ai-stack] + healthcheck: + test: ["CMD-SHELL", "bash -c 'exec 3<>/dev/tcp/localhost/6333'"] + interval: 10s + timeout: 5s + retries: 5 + # Replaces litellm — see issue #31 (wayfinder map) for the full migration # rationale/findings. No static config.yaml equivalent: provider routing # (llama-server, searxng-search) is registered once through the dashboard @@ -67,15 +83,15 @@ services: depends_on: llama-server: condition: service_started + qdrant: + condition: service_healthy volumes: - omniroute-data:/app/data env_file: .env environment: # Split-port mode: dashboard and API are fully separate ports (unlike - # LiteLLM's single :4000 for both /v1 and /ui) — only API_PORT (via - # the OMNIROUTE_PORT:4000 host mapping below) is published, so the - # dashboard has no network route in from outside this container at - # all. No NPM path-deny rule needed. + # LiteLLM's single :4000 for both /v1 and /ui) — both published + # directly below, unlike the old :4000-only host mapping. - API_HOST=0.0.0.0 - API_PORT=${OMNIROUTE_API_PORT:-20129} - DASHBOARD_PORT=${OMNIROUTE_DASHBOARD_PORT:-20128} @@ -97,11 +113,6 @@ services: # network can't resolve search.home on its own. extra_hosts: - "search.home:${SEARXNG_LAN_IP}" - # OMNIROUTE_PORT (host) is decoupled from API_PORT (container-internal, - # left at omniroute's own default) via plain Docker port mapping — the - # gateway needs to stay reachable at the same :4000 this stack has - # always published (NPM/firewall already point there), without having - # to also change omniroute's own internal port config to match. ports: - "${OMNIROUTE_API_PORT:-20129}:${OMNIROUTE_API_PORT:-20129}" - "${OMNIROUTE_DASHBOARD_PORT:-20128}:${OMNIROUTE_DASHBOARD_PORT:-20128}" @@ -153,3 +164,4 @@ networks: volumes: models: omniroute-data: + qdrant-data: