ndc8
commited on
Commit
Β·
4f67c26
1
Parent(s):
557b035
- .dockerignore +26 -0
- Dockerfile +31 -0
- README.md +1 -2
- app.py +10 -0
- space.yaml +0 -3
- test_app_structure.py +39 -0
.dockerignore
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Ignore unnecessary files for Docker build
|
| 2 |
+
__pycache__/
|
| 3 |
+
*.pyc
|
| 4 |
+
*.pyo
|
| 5 |
+
*.pyd
|
| 6 |
+
.Python
|
| 7 |
+
.env
|
| 8 |
+
.venv
|
| 9 |
+
env/
|
| 10 |
+
venv/
|
| 11 |
+
.git/
|
| 12 |
+
.gitignore
|
| 13 |
+
*.md
|
| 14 |
+
!README.md
|
| 15 |
+
.DS_Store
|
| 16 |
+
*.log
|
| 17 |
+
training_runs/
|
| 18 |
+
.github/
|
| 19 |
+
sample_data/
|
| 20 |
+
scripts/
|
| 21 |
+
test_*.py
|
| 22 |
+
debug_*.py
|
| 23 |
+
usage_examples.py
|
| 24 |
+
*.yaml
|
| 25 |
+
*.yml
|
| 26 |
+
!requirements.txt
|
Dockerfile
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Use Python 3.10 slim image
|
| 2 |
+
FROM python:3.10-slim
|
| 3 |
+
|
| 4 |
+
# Set up a new user named "user" with user ID 1000 (required by HF Spaces)
|
| 5 |
+
RUN useradd -m -u 1000 user
|
| 6 |
+
|
| 7 |
+
# Switch to the "user" user
|
| 8 |
+
USER user
|
| 9 |
+
|
| 10 |
+
# Set home to the user's home directory
|
| 11 |
+
ENV HOME=/home/user \
|
| 12 |
+
PATH=/home/user/.local/bin:$PATH \
|
| 13 |
+
HF_HOME=/tmp/.cache/huggingface \
|
| 14 |
+
TRANSFORMERS_NO_ADVISORY_WARNINGS=1
|
| 15 |
+
|
| 16 |
+
# Set the working directory to the user's home directory
|
| 17 |
+
WORKDIR $HOME/app
|
| 18 |
+
|
| 19 |
+
# Copy requirements and install dependencies
|
| 20 |
+
COPY --chown=user requirements.txt .
|
| 21 |
+
RUN pip install --no-cache-dir --upgrade pip && \
|
| 22 |
+
pip install --no-cache-dir -r requirements.txt
|
| 23 |
+
|
| 24 |
+
# Copy the application code
|
| 25 |
+
COPY --chown=user . .
|
| 26 |
+
|
| 27 |
+
# Expose port 7860 (HF Spaces default)
|
| 28 |
+
EXPOSE 7860
|
| 29 |
+
|
| 30 |
+
# Command to run the application
|
| 31 |
+
CMD ["python", "-m", "uvicorn", "backend_service:app", "--host", "0.0.0.0", "--port", "7860"]
|
README.md
CHANGED
|
@@ -4,8 +4,7 @@ emoji: "π€"
|
|
| 4 |
colorFrom: "blue"
|
| 5 |
colorTo: "green"
|
| 6 |
sdk: "docker"
|
| 7 |
-
|
| 8 |
-
app_file: backend_service.py
|
| 9 |
pinned: false
|
| 10 |
---
|
| 11 |
|
|
|
|
| 4 |
colorFrom: "blue"
|
| 5 |
colorTo: "green"
|
| 6 |
sdk: "docker"
|
| 7 |
+
app_port: 7860
|
|
|
|
| 8 |
pinned: false
|
| 9 |
---
|
| 10 |
|
app.py
CHANGED
|
@@ -1 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
from backend_service import app
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
Entry point for Hugging Face Spaces
|
| 4 |
+
This file imports and runs the FastAPI application from backend_service
|
| 5 |
+
"""
|
| 6 |
+
|
| 7 |
from backend_service import app
|
| 8 |
+
|
| 9 |
+
if __name__ == "__main__":
|
| 10 |
+
import uvicorn
|
| 11 |
+
uvicorn.run(app, host="0.0.0.0", port=7860)
|
space.yaml
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
sdk: docker
|
| 2 |
-
python_version: 3.10
|
| 3 |
-
entrypoint: python -m uvicorn backend_service:app --host 0.0.0.0 --port $PORT
|
|
|
|
|
|
|
|
|
|
|
|
test_app_structure.py
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
Test script to verify the FastAPI app can be imported and started
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
import sys
|
| 7 |
+
import os
|
| 8 |
+
|
| 9 |
+
# Add current directory to path
|
| 10 |
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
| 11 |
+
|
| 12 |
+
try:
|
| 13 |
+
# Test imports
|
| 14 |
+
print("Testing imports...")
|
| 15 |
+
from backend_service import app
|
| 16 |
+
print("β
Successfully imported FastAPI app from backend_service")
|
| 17 |
+
|
| 18 |
+
# Test app type
|
| 19 |
+
from fastapi import FastAPI
|
| 20 |
+
if isinstance(app, FastAPI):
|
| 21 |
+
print("β
App is a valid FastAPI instance")
|
| 22 |
+
else:
|
| 23 |
+
print("β App is not a FastAPI instance")
|
| 24 |
+
sys.exit(1)
|
| 25 |
+
|
| 26 |
+
# Test app attributes
|
| 27 |
+
print(f"β
App title: {app.title}")
|
| 28 |
+
print(f"β
App version: {app.version}")
|
| 29 |
+
|
| 30 |
+
print("\nπ All tests passed! The app is ready for Hugging Face Spaces")
|
| 31 |
+
|
| 32 |
+
except ImportError as e:
|
| 33 |
+
print(f"β Import error: {e}")
|
| 34 |
+
print("This is expected if you don't have all dependencies installed locally.")
|
| 35 |
+
print("The Hugging Face Space will install them from requirements.txt")
|
| 36 |
+
|
| 37 |
+
except Exception as e:
|
| 38 |
+
print(f"β Unexpected error: {e}")
|
| 39 |
+
sys.exit(1)
|