File size: 2,832 Bytes
c1cb516
 
 
 
 
79d630b
c1cb516
 
 
 
7041f6d
 
 
 
c1cb516
 
 
 
 
 
79d630b
 
 
c1cb516
79d630b
c1cb516
 
eaa6aea
 
 
f68525b
eaa6aea
 
 
 
a150dce
eaa6aea
 
 
a150dce
 
c1cb516
79d630b
a150dce
17d0ba7
 
 
 
 
 
79d630b
 
c1cb516
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
FROM python:3.9-slim

# Set environment variables
ENV PYTHONUNBUFFERED=1
ENV DEBIAN_FRONTEND=noninteractive
ENV BUILD_ID="$(date +%s)_$(echo $RANDOM)"

# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends git build-essential && rm -rf /var/lib/apt/lists/*

# Create app user with optimized cache directories for HF loading strategy
RUN useradd --create-home --shell /bin/bash app && \
    mkdir -p /app/.cache/huggingface /app/.cache/transformers /app/.config/matplotlib && \
    chown -R app:app /app

WORKDIR /app

# Copy requirements file
COPY requirements_hf_spaces.txt .

# CRITICAL FIX: Install NumPy 1.26.4 for PyTorch 2.1.0 + ECG-FM compatibility
# This version satisfies wfdb (>=1.26.4) and is compatible with PyTorch 2.x
RUN echo 'Installing NumPy 1.26.4 for PyTorch 2.1.0 + ECG-FM compatibility...' && pip install --no-cache-dir 'numpy==1.26.4' && echo 'NumPy 1.26.4 installed successfully'

# Install Python dependencies (PyTorch 2.1.0 + all other packages)
RUN pip install --no-cache-dir -r requirements_hf_spaces.txt

# CRITICAL FIX: Install fairseq-signals with proper error handling
# Break down the installation into separate steps to avoid shell command issues
RUN echo 'Step 1: Cloning fairseq-signals repository...' && \
    git clone https://github.com/Jwoo5/fairseq-signals.git && \
    echo 'Step 2: Repository cloned successfully'

RUN echo 'Step 3: Installing fairseq-signals without C++ extensions...' && \
    cd fairseq-signals && \
    pip install --editable ./ --no-build-isolation && \
    echo 'Step 4: fairseq_signals installed successfully'

RUN echo 'Step 5: Verifying fairseq_signals import...' && \
    python -c "import fairseq_signals; print('✅ fairseq_signals imported successfully (without C++ extensions)')" && \
    echo 'fairseq_signals installation verified - C++ extensions skipped for compatibility'

# CRITICAL FIX: Force reinstall NumPy 1.26.4 to prevent overwrite by fairseq_signals
# fairseq_signals installation pulls transformers which overwrites NumPy with 2.0.2
# This step ensures ECG-FM compatibility is maintained
RUN echo 'CRITICAL: Reinstalling NumPy 1.26.4 after fairseq-signals to prevent version conflict...' && \
    pip install --force-reinstall --no-cache-dir 'numpy==1.26.4' && \
    python -c "import numpy; print(f'✅ NumPy version confirmed: {numpy.__version__}')" && \
    echo 'NumPy 1.26.4 reinstalled successfully - ECG-FM compatibility restored'

# Copy application files (updated 2025-08-25 14:15 UTC - PyTorch 2.x compatibility for ECG-FM weight_norm function)
# Build trigger attempt #11 - PyTorch 2.x compatibility for ECG-FM weight_norm function
COPY . .

# Switch to app user
USER app

# Expose port
EXPOSE 7860

# Start the application
CMD ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "7860"]