Stack complete, but a tad overwhelming šŸ˜…

Hi all!

So I finally got my new stack mostly working, save a couple of errors I still need to post logs for laterā€¦and as a newbie to the scene of development (going on about 3 months of learning now), Iā€™m quite proud to get it all configured mostly correct.

Hereā€™s the thing, Iā€™m not sure the best way to go about managing half of this :sweat_smile:.

My intention for this stack is to use my complete OWUI as per normal (thatā€™s the Tika/Pipelines/Ollama/OWUI part), and then for heavy coding or app developmentā€¦kick in Bolt.diy. Iā€™d like to be able to use EXL2 models (hence TabbyAPI) to do some developing with, and my 3-4 GGUF models in OWUI but can call upon in Bolt.diy too. I want to eventually move into EXL2 models permanent as someone VRAM constrained.

Apart from watching Coleā€™s videos on bolt.diy, Iā€™d love for some help or knowledge (besides my OWUI playground and prompting) that can help augment how to utilize my stack to the best of its capabilities! I appreciate everyone making this an awesome, growing community!

1 Like

Nice stack @clduab11, I love it!!

Sounds like a great plan. Do you have any specific questions to help you get the most out of what youā€™ve set up?

Hi @ColeMedin , thanks so much for what youā€™ve thrown together!

Yes! I wanted to take a bit of time to get my thoughts together as I got a bit ahead of myself it seems haha!

So, after doing some deeper digging, Iā€™ve found that every time I launch bolt.diy (my stack, really), I get this errorā€¦

Strangely, when I refresh the page, it works as normal. Iā€™m not sure if it has anything to do with my Docker logs belowā€¦

ā€¦but this appears in my logs, too.

The reason I bring this up is because while Bolt.diy can see my local models via Ollama, every time I try to select them to use them, I get an error saying ā€œNo details can be returnedā€.

My Ollama ā€œinstallā€ is a Docker container as well; I didnā€™t want to install it on my desktop as a standalone app. Any advice or tips you can give me in helping to diagnose this error so I can use my local models and still use them like normally in Open WebUI? Iā€™m installing on Windows 11 (via Docker Compose), and Iā€™ve included my .yaml that I launch my stack with if it helps narrow anything down.

services:
  # -----------------------
  # 1) WATCHTOWER
  # -----------------------
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    runtime: nvidia
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_POLL_INTERVAL=3000
      - WATCHTOWER_TIMEOUT=300s
      - WATCHTOWER_INCLUDE_STOPPED=true
    networks:
      - shared-network
    restart: unless-stopped
    env_file:
      -my-keys.env

  # -----------------------
  # 2) OLLAMA
  # -----------------------
  ollama:
    image: ollama/ollama
    container_name: ollama
    depends_on:
      - watchtower
    ports:
      - "11434:11434"
    runtime: nvidia
    volumes:
      - ./ollama:/root/.ollama
    networks:
      - shared-network
    restart: always
    env_file:
      -my-keys.env

  # -----------------------
  # 3) TABBYAPI
  # -----------------------
  tabbyapi:
    image: ghcr.io/theroyallab/tabbyapi:latest
    container_name: tabbyapi
    depends_on:
      - watchtower
    ports:
      - "5000:5000"
    runtime: nvidia
    environment:
      - NAME=TabbyAPI
      - NVIDIA_VISIBLE_DEVICES=all
    volumes:
      - ./models:/app/models
      - ./config.yml:/app/config.yml
    networks:
      - shared-network
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "http://127.0.0.1:5000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
    env_file:
      -my-keys.env

  # -----------------------
  # 4) LITELLM
  # -----------------------
  litellm:
    image: ghcr.io/berriai/litellm:main-latest
    container_name: litellm
    depends_on:
      - watchtower
      - tabbyapi
      - ollama
      - db
    ports:
      - "8000:8000"
    runtime: nvidia
    environment:
      - DATABASE_URL=postgresql://llmproxy:dbpassword9090@db:5432/litellm
      - STORE_MODEL_IN_DB=True
      - PORT=8000
    volumes:
      - ./proxy_config.yaml:/app/config.yaml
      - ./litellm-data:/app/backend/data
    command: ["--config", "/app/config.yaml", "--num_workers", "8"]
    networks:
      - shared-network
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      timeout: 300s
      retries: 3
    env_file:
      -my-keys.env  

  # -----------------------
  # 5) BOLT.DIY
  # -----------------------
  boltdiy:
    build:
      context: ./bolt.diy
      dockerfile: Dockerfile
      target: bolt-ai-development
    container_name: boltdiy
    depends_on:
      - watchtower
      - litellm
      - ollama
    ports:
      - "5173:5173"
    runtime: nvidia
    environment:
      - NODE_ENV=development
      - PORT=5173
      - OLLAMA_API_BASE_URL=http://127.0.0.1:11434
      - RUNNING_IN_DOCKER=true
      - HUGGINGFACE_API_KEY=${HUGGINGFACE_API_KEY}
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
      - OPEN_ROUTER_API_KEY=${OPEN_ROUTER_API_KEY}
      - GOOGLE_GENERATIVE_AI_API_KEY=${GOOGLE_GENERATIVE_AI_API_KEY}
      - TOGETHER_API_KEY=${TOGETHER_API_KEY}
      - TOGETHER_API_BASE_URL=${TOGETHER_API_BASE_URL}
      - VITE_LOG_LEVEL=${VITE_LOG_LEVEL}
      - DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX}
    networks:
      - shared-network
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5173/health"]
      interval: 30s
      timeout: 300s
      retries: 3
    env_file:
      -my-keys.env


  # -----------------------
  # 6) PROMETHEUS
  # -----------------------
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    depends_on:
      - watchtower
    ports:
      - "127.0.0.1:9090:9090"
    volumes:
      - prometheus_data:/prometheus
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--storage.tsdb.retention.time=15d'
    networks:
      - shared-network
    restart: always

  # -----------------------
  # 7) DATABASE
  # -----------------------
  db:
    image: postgres
    container_name: postgres
    environment:
      POSTGRES_DB: litellm
      POSTGRES_USER: llmproxy
      POSTGRES_PASSWORD: dbpassword9090
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -d litellm -U llmproxy"]
      interval: 1s
      timeout: 5s
      retries: 10
    networks:
      - shared-network
    restart: always

  # -----------------------
  # 8) WEBUI
  # -----------------------
  webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    depends_on:
      - watchtower
      - ollama
      - litellm
    ports:
      - "3000:8080"
    runtime: nvidia
    environment:
      - OLLAMA_API_BASE_URL=http://ollama:11434/api
      - OPENAI_API_BASE_URL=http://litellm:8000/v1
      - NVIDIA_VISIBLE_DEVICES=all
      - NVIDIA_DRIVER_CAPABILITIES=compute,utility
    volumes:
      - ./appdata:/app/backend/data
      - ./shared-data:/app/shared
    networks:
      - shared-network
    restart: always

  # -----------------------
  # 9) PIPELINES
  # -----------------------
  pipelines:
    image: ghcr.io/open-webui/pipelines:main
    container_name: pipelines
    depends_on:
      - watchtower
      - webui
    ports:
      - "9099:9099"
    runtime: nvidia
    environment:
      PIPELINES_URLS: "https://github.com/open-webui/pipelines/blob/main/examples/filters/detoxify_filter_pipeline.py"
    volumes:
      - pipelines:/app/pipelines
    networks:
      - shared-network
    restart: always

  # -----------------------
  # 10) TIKA
  # -----------------------
  tika:
    image: apache/tika:latest
    container_name: tika
    depends_on:
      - watchtower
    ports:
      - "9998:9998"
    networks:
      - shared-network
    restart: always

# -----------------------
# NETWORK & VOLUMES
# -----------------------
networks:
  shared-network:
    driver: bridge

volumes:
  prometheus_data:
  pipelines:

Thank you so much for developing this and giving us an opportunity to brainstorm together; this is going to really help me out in trying to develop my own workflow in agentic development and hopefully Iā€™m able to pitch in with collaboration!!

1 Like

@clduab11 What is your base URL for Ollama in bolt.diy? Do you have it set to http://ollama:11434/api like you do for Open WebUI? Iā€™m guessing that URL could be the issue, curious what you have tried.

I got it to work! :slight_smile: The issue at first was because I hadnā€™t done my due diligence in setting up the linkā€¦ I really needed to have it set up as http://host.docker.internal:11434, and now it registers them fine!

I still get the error cropping up belowā€¦ it doesnā€™t seem to affect functionality based on the work Iā€™ve done in bolt.diy thus farā€¦

2025-01-09 13:55:05 prometheus | time=2025-01-09T19:55:05.922Z level=INFO source=notifier.go:702 msg=ā€œStopping notification managerā€¦ā€ component=notifier
2025-01-09 13:55:05 prometheus | time=2025-01-09T19:55:05.922Z level=INFO source=notifier.go:409 msg=ā€œDraining any remaining notificationsā€¦ā€ component=notifier
2025-01-09 13:55:05 prometheus | time=2025-01-09T19:55:05.923Z level=INFO source=notifier.go:415 msg=ā€œRemaining notifications drainedā€ component=notifier
2025-01-09 13:55:05 prometheus | time=2025-01-09T19:55:05.923Z level=INFO source=notifier.go:345 msg=ā€œNotification manager stoppedā€ component=notifier
2025-01-09 13:55:05 prometheus | time=2025-01-09T19:55:05.923Z level=INFO source=main.go:1357 msg=ā€œNotifier manager stoppedā€
2025-01-09 13:55:05 prometheus | time=2025-01-09T19:55:05.923Z level=INFO source=main.go:1371 msg=ā€œSee you next time!ā€
2034-01-01 00:00:00
prometheus exited with code 0
tabbyapi | 2025-01-09T19:55:24.098269881Z INFO: 127.0.0.1:54926 - ā€œGET /health HTTP/1.1ā€ 200
2025-01-09 13:55:29 boltdiy | Error: No route matches URL ā€œ/healthā€
2025-01-09 13:55:29 boltdiy | at getInternalRouterError (/app/node_modules/.pnpm/@remix-run+router@1.21.0/node_modules/@remix-run/router/router.ts:5505:5)
2025-01-09 13:55:29 boltdiy | at Object.query (/app/node_modules/.pnpm/@remix-run+router@1.21.0/node_modules/@remix-run/router/router.ts:3527:19)
2025-01-09 13:55:29 boltdiy | at handleDocumentRequest (/app/node_modules/.pnpm/@remix-run+server-runtime@2.15.0_typescript@5.7.2/node_modules/@remix-run/server-runtime/dist/server.js:275:35)
2025-01-09 13:55:29 boltdiy | at requestHandler (/app/node_modules/.pnpm/@remix-run+server-runtime@2.15.0_typescript@5.7.2/node_modules/@remix-run/server-runtime/dist/server.js:160:24)
2025-01-09 13:55:29 boltdiy | at processTicksAndRejections (node:internal/process/task_queues:95:5)
2025-01-09 13:55:29 boltdiy | at /app/node_modules/.pnpm/@remix-run+dev@2.15.0_@remix-run+react@2.15.0_react-dom@18.3.1_react@18.3.1__react@18.3.1_typ_3djlhh3t6jbfog2cydlrvgreoy/node_modules/@remix-run/dev/dist/vite/cloudflare-proxy-plugin.js:70:25
2025-01-09 13:55:29 boltdiy | No routes matched location ā€œ/healthā€
2025-01-09 13:55:29 boltdiy | ErrorResponseImpl {
2025-01-09 13:55:29 boltdiy | status: 404,
2025-01-09 13:55:29 boltdiy | statusText: ā€˜Not Foundā€™,
2025-01-09 13:55:29 boltdiy | internal: true,
2025-01-09 13:55:29 boltdiy | data: ā€˜Error: No route matches URL ā€œ/healthā€ā€™,
2025-01-09 13:55:29 boltdiy | error: Error: No route matches URL ā€œ/healthā€
2025-01-09 13:55:29 boltdiy | at getInternalRouterError (/app/node_modules/.pnpm/@remix-run+router@1.21.0/node_modules/@remix-run/router/router.ts:5505:5)
2025-01-09 13:55:29 boltdiy | at Object.query (/app/node_modules/.pnpm/@remix-run+router@1.21.0/node_modules/@remix-run/router/router.ts:3527:19)
2025-01-09 13:55:29 boltdiy | at handleDocumentRequest (/app/node_modules/.pnpm/@remix-run+server-runtime@2.15.0_typescript@5.7.2/node_modules/@remix-run/server-runtime/dist/server.js:275:35)
2025-01-09 13:55:29 boltdiy | at requestHandler (/app/node_modules/.pnpm/@remix-run+server-runtime@2.15.0_typescript@5.7.2/node_modules/@remix-run/server-runtime/dist/server.js:160:24)
2025-01-09 13:55:29 boltdiy | at processTicksAndRejections (node:internal/process/task_queues:95:5)
2025-01-09 13:55:29 boltdiy | at /app/node_modules/.pnpm/@remix-run+dev@2.15.0_@remix-run+react@2.15.0_react-dom@18.3.1_react@18.3.1__react@18.3.1_typ_3djlhh3t6jbfog2cydlrvgreoy/node_modules/@remix-run/dev/dist/vite/cloudflare-proxy-plugin.js:70:25
2025-01-09 13:55:29 boltdiy | }
2025-01-09 13:55:29 boltdiy | No routes matched location ā€œ/healthā€

At first I thought it was my Prometheus incorrectly configured and itā€™s pinging bad endpoints as a health check, but I disabled Prometheus and still have that error crop up in my logs every 30 seconds or so.

But as far as main functionality in the IDE, it works great! Love what you have put together and Iā€™m excited to take part in the journey with the community.

1 Like

Glad you got it working! Nice job and I love your stack!

It seems like itā€™s trying to ping the /health endpoint from Ollama for some reason, which is strange. I havenā€™t seen that before. But Iā€™m glad that everything is working so I suppose it can be safely ignored.

Thanks the kind words and being a part of the community!

1 Like