services:
  # FastAPI application
  api:
    image: redbear-mem-open:latest
    container_name: api
    ports:
      - "8002:8000"
    env_file:
      - .env
    volumes:
      - ./files:/files
      - /etc/localtime:/etc/localtime:ro
    command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload --log-level debug
    restart: unless-stopped
    networks:
      - default
      - celery
    depends_on:
      - worker-memory
      - worker-document

  # Memory worker - Memory read/write tasks (threads pool for asyncio)
  worker-memory:
    image: redbear-mem-open:latest
    container_name: worker-memory
    env_file:
      - .env
    volumes:
      - ./files:/files
      - /etc/localtime:/etc/localtime:ro
    command: celery -A app.celery_worker.celery_app worker -E --loglevel=info --pool=threads --concurrency=100 --queues=memory_tasks -n memory_worker@%h
    restart: unless-stopped
    networks:
      - celery

  # Document worker - Document parsing tasks (prefork for CPU-bound)
  worker-document:
    image: redbear-mem-open:latest
    container_name: worker-document
    env_file:
      - .env
    volumes:
      - ./files:/files
      - /etc/localtime:/etc/localtime:ro
    command: celery -A app.celery_worker.celery_app worker -E --loglevel=info --pool=prefork --concurrency=4 --queues=document_tasks --max-tasks-per-child=100 -n document_worker@%h
    restart: unless-stopped
    networks:
      - celery

  # Celery Beat - scheduler
  beat:
    image: redbear-mem-open:latest
    container_name: celery-beat
    env_file:
      - .env
    volumes:
      - ./files:/files
      - /etc/localtime:/etc/localtime:ro
    command: celery -A app.celery_worker.celery_app beat --loglevel=info
    restart: unless-stopped
    networks:
      - celery
    depends_on:
      - worker-memory

networks:
  celery:
