Shouvik599 commited on
Commit
14cd71d
·
1 Parent(s): 17cd011

path fix for models

Browse files
Dockerfile CHANGED
@@ -10,7 +10,7 @@ RUN corepack enable && pnpm install --frozen-lockfile
10
  COPY frontend/ .
11
  RUN pnpm build
12
 
13
- # Stage 2: Python backend
14
  FROM python:3.11-slim
15
 
16
  WORKDIR /app
@@ -26,7 +26,7 @@ COPY backend/pyproject.toml backend/uv.lock* ./
26
  # Grab the uv binary from the official image
27
  COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
28
 
29
- # Install Python dependencies (this includes tensorflow and kagglehub for model training)
30
  RUN uv sync --frozen --no-dev
31
 
32
  # Create necessary directories
@@ -45,5 +45,5 @@ ENV PORT=7860
45
  EXPOSE 7860
46
 
47
  # Use PORT environment variable (defaults to 7860 for Hugging Face Space compatibility)
48
- # The model will be trained at first startup if model files don't exist
49
  CMD ["sh", "-c", "uv run uvicorn app.main:app --host 0.0.0.0 --port ${PORT}"]
 
10
  COPY frontend/ .
11
  RUN pnpm build
12
 
13
+ # Stage 2: Python backend with model training at runtime
14
  FROM python:3.11-slim
15
 
16
  WORKDIR /app
 
26
  # Grab the uv binary from the official image
27
  COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
28
 
29
+ # Install Python dependencies (includes tensorflow and kagglehub for model training)
30
  RUN uv sync --frozen --no-dev
31
 
32
  # Create necessary directories
 
45
  EXPOSE 7860
46
 
47
  # Use PORT environment variable (defaults to 7860 for Hugging Face Space compatibility)
48
+ # Model training happens at first startup if models don't exist (see app/main.py)
49
  CMD ["sh", "-c", "uv run uvicorn app.main:app --host 0.0.0.0 --port ${PORT}"]
backend/app/voice_analysis.py CHANGED
@@ -24,9 +24,11 @@ N_MFCC = 40
24
  EMOTION_LABELS = ['neutral', 'calm', 'happy', 'sad', 'angry', 'fearful', 'disgust', 'surprised']
25
 
26
  # Paths to models
 
 
 
27
  BACKEND_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
28
- PROJECT_ROOT = os.path.dirname(BACKEND_DIR)
29
- MODEL_DIR = os.path.join(PROJECT_ROOT, "models")
30
 
31
  # CNN model paths
32
  CNN_MODEL_PATH = os.path.join(MODEL_DIR, "ravdess_cnn_model.h5")
 
24
  EMOTION_LABELS = ['neutral', 'calm', 'happy', 'sad', 'angry', 'fearful', 'disgust', 'surprised']
25
 
26
  # Paths to models
27
+ # __file__ is /app/app/voice_analysis.py in Docker, so:
28
+ # - os.path.dirname(__file__) = /app/app
29
+ # - os.path.dirname(os.path.dirname(__file__)) = /app (project root)
30
  BACKEND_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
31
+ MODEL_DIR = os.path.join(BACKEND_DIR, "models")
 
32
 
33
  # CNN model paths
34
  CNN_MODEL_PATH = os.path.join(MODEL_DIR, "ravdess_cnn_model.h5")
backend/uv.lock CHANGED
@@ -1053,6 +1053,35 @@ wheels = [
1053
  { url = "https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca", size = 7659, upload-time = "2026-03-23T22:32:31.568Z" },
1054
  ]
1055
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1056
  [[package]]
1057
  name = "keras"
1058
  version = "3.12.1"
@@ -3325,6 +3354,7 @@ dependencies = [
3325
  { name = "fastapi" },
3326
  { name = "httpx" },
3327
  { name = "joblib" },
 
3328
  { name = "langchain-core" },
3329
  { name = "langchain-nvidia-ai-endpoints" },
3330
  { name = "langgraph" },
@@ -3339,6 +3369,7 @@ dependencies = [
3339
  { name = "scikit-learn", version = "1.7.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
3340
  { name = "scikit-learn", version = "1.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
3341
  { name = "soundfile" },
 
3342
  { name = "tf-keras" },
3343
  { name = "uvicorn" },
3344
  ]
@@ -3357,6 +3388,7 @@ requires-dist = [
3357
  { name = "fastapi", specifier = ">=0.115.0" },
3358
  { name = "httpx", specifier = ">=0.27.0" },
3359
  { name = "joblib", specifier = ">=1.4.0" },
 
3360
  { name = "langchain-core", specifier = ">=0.3.0" },
3361
  { name = "langchain-nvidia-ai-endpoints", specifier = ">=0.3.0" },
3362
  { name = "langgraph", specifier = ">=0.2.0" },
@@ -3369,6 +3401,7 @@ requires-dist = [
3369
  { name = "python-multipart", specifier = ">=0.0.12" },
3370
  { name = "scikit-learn", specifier = ">=1.5.0" },
3371
  { name = "soundfile", specifier = ">=0.12.0" },
 
3372
  { name = "tf-keras", specifier = ">=2.18.0" },
3373
  { name = "uvicorn", specifier = ">=0.32.0" },
3374
  ]
 
1053
  { url = "https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca", size = 7659, upload-time = "2026-03-23T22:32:31.568Z" },
1054
  ]
1055
 
1056
+ [[package]]
1057
+ name = "kagglehub"
1058
+ version = "1.0.0"
1059
+ source = { registry = "https://pypi.org/simple" }
1060
+ dependencies = [
1061
+ { name = "kagglesdk" },
1062
+ { name = "packaging" },
1063
+ { name = "pyyaml" },
1064
+ { name = "requests" },
1065
+ { name = "tqdm" },
1066
+ ]
1067
+ sdist = { url = "https://files.pythonhosted.org/packages/98/b2/a542a926e47f0f6947d9fa7117b3a730edbf2a76fffc71e19b8755a58f33/kagglehub-1.0.0.tar.gz", hash = "sha256:21dc25d0279e2071f8b97cd9e1393d003ea5e054ea48f1e8139a39e4771e9a8d", size = 117315, upload-time = "2026-02-11T19:45:36.227Z" }
1068
+ wheels = [
1069
+ { url = "https://files.pythonhosted.org/packages/18/78/08cec00ea05fd2469f9395da0306bb368c4ed275693be8d31473eafaf90c/kagglehub-1.0.0-py3-none-any.whl", hash = "sha256:9397f0c6af04cdefa6fa8734c31b42863e8741aad5832c6f3af52f1ecf8fe509", size = 70632, upload-time = "2026-02-11T19:45:34.626Z" },
1070
+ ]
1071
+
1072
+ [[package]]
1073
+ name = "kagglesdk"
1074
+ version = "0.1.16"
1075
+ source = { registry = "https://pypi.org/simple" }
1076
+ dependencies = [
1077
+ { name = "protobuf" },
1078
+ { name = "requests" },
1079
+ ]
1080
+ sdist = { url = "https://files.pythonhosted.org/packages/23/0e/51bf72a462e1e72fe3427b7c52b11c9c52cbcc63d7ce90f81a8f56d5a71b/kagglesdk-0.1.16.tar.gz", hash = "sha256:4a20da4ac6f4085e64b976a313ee136d4698737dc5be7c0f13009fadd41d5540", size = 121064, upload-time = "2026-02-27T19:32:34.019Z" }
1081
+ wheels = [
1082
+ { url = "https://files.pythonhosted.org/packages/69/6b/db30f17ad132391ac37a751fa45b32fd954a7ffa484fa3550eee9678334d/kagglesdk-0.1.16-py3-none-any.whl", hash = "sha256:a26ba7a754866f8eef1e327e78101f2960b6fe9b1b323183f2f61170abdb11ff", size = 160520, upload-time = "2026-02-27T19:32:32.721Z" },
1083
+ ]
1084
+
1085
  [[package]]
1086
  name = "keras"
1087
  version = "3.12.1"
 
3354
  { name = "fastapi" },
3355
  { name = "httpx" },
3356
  { name = "joblib" },
3357
+ { name = "kagglehub" },
3358
  { name = "langchain-core" },
3359
  { name = "langchain-nvidia-ai-endpoints" },
3360
  { name = "langgraph" },
 
3369
  { name = "scikit-learn", version = "1.7.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
3370
  { name = "scikit-learn", version = "1.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
3371
  { name = "soundfile" },
3372
+ { name = "tensorflow" },
3373
  { name = "tf-keras" },
3374
  { name = "uvicorn" },
3375
  ]
 
3388
  { name = "fastapi", specifier = ">=0.115.0" },
3389
  { name = "httpx", specifier = ">=0.27.0" },
3390
  { name = "joblib", specifier = ">=1.4.0" },
3391
+ { name = "kagglehub", specifier = ">=0.3.0" },
3392
  { name = "langchain-core", specifier = ">=0.3.0" },
3393
  { name = "langchain-nvidia-ai-endpoints", specifier = ">=0.3.0" },
3394
  { name = "langgraph", specifier = ">=0.2.0" },
 
3401
  { name = "python-multipart", specifier = ">=0.0.12" },
3402
  { name = "scikit-learn", specifier = ">=1.5.0" },
3403
  { name = "soundfile", specifier = ">=0.12.0" },
3404
+ { name = "tensorflow", specifier = ">=2.15.0" },
3405
  { name = "tf-keras", specifier = ">=2.18.0" },
3406
  { name = "uvicorn", specifier = ">=0.32.0" },
3407
  ]
models/train_cnn.py CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:aac569cc4a3492d3429fd690b88d6ea3c1a04910606c4d01186d78198327f442
3
- size 6267
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:615316b4c5ea006dcf082eb520c35275fcb6fdc48eb686110d8d66baf50d8495
3
+ size 6752