services: gateway: build: context: . dockerfile: gateway/Dockerfile ports: - "8003:8000" env_file: - .env environment: - CLIP_URL=http://clip:8000 - BLIP_URL=http://blip:8000 - YOLO_URL=http://yolo:8000 - QDRANT_SVC_URL=http://qdrant-svc:8000 - API_KEY=${API_KEY} - VISION_TIMEOUT=300 - MAX_IMAGE_BYTES=52428800 depends_on: clip: condition: service_healthy blip: condition: service_healthy yolo: condition: service_healthy qdrant-svc: condition: service_healthy healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health', timeout=5).read()"] interval: 30s timeout: 10s retries: 3 start_period: 20s qdrant: image: qdrant/qdrant:latest ports: - "6333:6333" volumes: - ./data/qdrant:/qdrant/storage environment: - QDRANT__SERVICE__GRPC_PORT=6334 healthcheck: test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/6333' || exit 1"] interval: 30s timeout: 10s retries: 5 start_period: 15s qdrant-svc: build: context: . dockerfile: qdrant/Dockerfile environment: - QDRANT_HOST=qdrant - QDRANT_PORT=6333 - CLIP_URL=http://clip:8000 - COLLECTION_NAME=images - VECTOR_DIM=512 depends_on: qdrant: condition: service_healthy clip: condition: service_healthy healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health', timeout=5).read()"] interval: 30s timeout: 10s retries: 3 start_period: 20s clip: build: context: . dockerfile: clip/Dockerfile environment: - MODEL_NAME=ViT-B-32 - MODEL_PRETRAINED=openai healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health', timeout=5).read()"] interval: 30s timeout: 10s retries: 5 start_period: 60s blip: build: context: . dockerfile: blip/Dockerfile environment: - BLIP_MODEL=Salesforce/blip-image-captioning-base #- BLIP_MODEL=Salesforce/blip-image-captioning-small healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health', timeout=5).read()"] interval: 30s timeout: 10s retries: 5 start_period: 90s yolo: build: context: . dockerfile: yolo/Dockerfile environment: - YOLO_MODEL=yolov8n.pt healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health', timeout=5).read()"] interval: 30s timeout: 10s retries: 5 start_period: 60s