services:
  ollama1: #For GPU 0
    image: ${OLLAMA:-ollama/ollama:latest}
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              capabilities: [gpu]
              device_ids: ['0']  
    volumes:
      - ollama-small:/root/.ollama
    ports:
      - 11434:11434
    restart: always
    container_name: ollama1
    environment:
      OLLAMA_KEEP_ALIVE: -1
    networks:
      - shared_net

  ollama2: #For GPU 1
    image: ${OLLAMA:-ollama/ollama:latest}
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              capabilities: [gpu]
              device_ids: ['1']
    volumes:
      - ollama:/root/.ollama
    restart: always
    container_name: ollama2
    environment:
      OLLAMA_KEEP_ALIVE: -1
    networks:
      - shared_net


  open_webui:
    container_name: openwebui
    image: ${OPENWEBUI:-ghcr.io/open-webui/open-webui:main}
    ports:
      - "3000:8080"
    volumes:
      - data:/app/backend/data
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              capabilities: [gpu]
              count: all
    restart: always
    networks:
      - shared_net
    environment:

      # Privacy
      SCARF_NO_ANALYTICS: True 
      DO_NOT_TRACK: True
      ANONYMIZED_TELEMETRY: True

      # General
      RESET_CONFIG_ON_START: True
      WEBUI_URL: https://ai.hackedyour.info
      ADMIN_EMAIL: adamoutler@gmail.com
      ENABLE_CHANNELS: True
      USE_CUDA_DOCKER: True
      ENABLE_REALTIME_CHAT_SAVE: False
      ENV: dev

      #Database
      DATABASE_URL: postgresql://openwebui_user:${PG_PASS}@openwebui_postgres_db:5432/openwebui_db

      # Ollama
      OLLAMA_BASE_URL: http://ollama1:11434
      OLLAMA_BASE_URLS: http://ollama1:11434;http://ollama2:11434

      # OpenAI
      OPENAI_API_KEY: ${OPEN_AI_TOKEN}

      # RAG
      CHUNK_SIZE: 1000
      CHUNK_OVERLAP: 100
      CHROMA_HTTP_HOST: chromadb
      CHROMA_HTTP_PORT: 8000
      
      # TIKA
      CONTENT_EXTRACTION_ENGINE: tika
      TIKA_SERVER_URL: http://tika:9998

      # LDAP
      ENABLE_LOGIN_FORM: true
      ENABLE_SIGNUP: false
      ENABLE_LDAP: true
      LDAP_APP_DN: ${AD_BIND_USER}
      LDAP_APP_PASSWORD: ${AD_BIND_PASSWORD}
      LDAP_ATTRIBUTE_FOR_USERNAME: sAMAccountName 
      LDAP_ATTRIBUTE_FOR_MAIL: mail
      LDAP_SEARCH_BASE: CN=Users,DC=activedirectory,DC=adamoutler,DC=com
      LDAP_SEARCH_FILTERS: (&(memberOf=CN=AI,OU=Groups,dc=activedirectory,dc=adamoutler,dc=com))
      LDAP_SERVER_HOST: 192.168.1.100
      LDAP_SERVER_LABEL: FluffysNet
      LDAP_SERVER_PORT: 389
      LDAP_USE_TLS: false

      # OAUTH
      ENABLE_OAUTH_SIGNUP: false
      OAUTH_PROVIDER_NAME: git.adamoutler.com permissions
      OPENID_PROVIDER_URL: https://git.adamoutler.com/.well-known/openid-configuration
      OPENID_REDIRECT_URI: https://ai.hackedyour.info/oauth/oidc/callback
      OAUTH_CLIENT_ID: ${CLIENT_ID}
      OAUTH_CLIENT_SECRET: ${CLIENT_SECRET}
      OAUTH_USERNAME_CLAIM: name
      OAUTH_MERGE_ACCOUNTS_BY_EMAIL: true

      # Redis Support
      ENABLE_WEBSOCKET_SUPPORT: True
      WEBSOCKET_MANAGER: redis # This is the default, no need to set explicitly unless changing
      WEBSOCKET_REDIS_URL: redis://redis:6379/0
      REDIS_URL: redis://redis:6379/0 # Also set for app state, using the same instance


  tika:
    image: ${TIKA:-apache/tika:latest}
    ports:
      - "9998:9998"
    restart: always
    container_name: tika
    networks:
      - shared_net

  chromadb:
    container_name: chromadb
    image: ${CHROMADB:-chromadb/chroma:latest}
    restart: always
    ports:
      - 8000:8000
    volumes:
      - chromadb:/data
    environment:
      ALLOW_RESET: TRUE
    networks:
      - shared_net

  redis:
    image: redis:alpine 
    container_name: redis
    restart: always
    volumes:
      - redis_data:/data
    networks:
      - shared_net

  openwebui_postgres_db: # Renamed service key (lowercase)
    image: postgres:latest
    container_name: openwebui_postgres_db # Keep container name consistent
    restart: always
    environment:
      POSTGRES_DB: openwebui_db
      POSTGRES_USER: openwebui_user
      POSTGRES_PASSWORD: ${PG_PASS}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - shared_net

volumes:
  ollama:
  ollama-small:
  data:
  chromadb:
  redis_data:
  postgres_data:

networks:
  shared_net: